AndroidにてFatal Signal 11 (SIGSEGV), code 1,
BaseAdapterに、独自のフィルター機能を付け加えたAdapterにフィルターを掛けると以下のエラーが発生してクラッシュしてしまいます。
具体的なクラッシュ箇所は明示されませんが、ログを見る限り、WebViewがあやしいのか?と勘ぐりたくなりますが、アプリ内でのWebViewの使用箇所はありません。
以下のログは私のアプリケーション内のログです。
06-07 22:28:33.778: W/art(9064): static void art::Dbg::DdmSendHeapSegments(bool) unimplemented Not counting objects in space SpaceTypeImageSpace begin=0x6f4da000,end=0x6fe4ea88,size=9MB,name="/data/dalvik-cache/arm/system@framework@boot.art"]
06-07 22:28:33.779: W/art(9064): static void art::Dbg::DdmSendHeapSegments(bool) unimplemented Not counting objects in space SpaceTypeZygoteSpace begin=0x72e29000,end=0x745ae000,size=23MB,name="Zygote space"]
06-07 22:28:33.821: D/BoardListAdapter(9064): setFilterItems
06-07 22:28:33.961: W/google-breakpad(9064): ### ### ### ### ### ### ### ### ### ### ### ### ###
06-07 22:28:33.961: W/google-breakpad(9064): Chrome build fingerprint:
06-07 22:28:33.961: W/google-breakpad(9064): 1.0
06-07 22:28:33.961: W/google-breakpad(9064): 1
06-07 22:28:33.961: W/google-breakpad(9064): 92675e2e-3e24-4fdd-9bc9-d979deace950
06-07 22:28:33.961: W/google-breakpad(9064): ### ### ### ### ### ### ### ### ### ### ### ### ###
06-07 22:28:33.961: E/chromium(9064): ### WebView Version 43.0.2357.121 (code 2357121)
06-07 22:28:33.962: A/libc(9064): Fatal signal 11 (SIGSEGV), code 1, fault addr 0x0 in tid 9064 (****.********)
フィルター機能は、以下のようになっています。
BaseAdapterを継承したクラス
private ArrayList<BoardItem> mOriginalList;//元データ
private ArrayList<BoardItem> mFilterdlList;//フィルターを適用したデータ
private ArrayList<BoardItem> mPublishList;//表示するデータ
private ArrayList<FilterItem> mFilterList;//フィルターデータ
public void setData(Collection<? extends BoardItem> data) {
synchronized (mLock) {
mOriginalList.clear();
mOriginalList.addAll(data);
filter();
}
notifyDataSetChanged();
}
public void clear() {
synchronized (mLock) {
mOriginalList.clear();
filter();
}
notifyDataSetChanged();
}
public void addAll(Collection<? extends BoardItem> items) {
synchronized (mLock) {
mOriginalList.addAll(items);
filter();
}
notifyDataSetChanged();
}
/**
* FilterItemをアダプターにセットして、フィルターを反映させます
*
* @param filterItems
*/
public void setFilterItems(ArrayList<FilterItem> filterItems) {
Log.d(TAG, "setFilterItems");
synchronized (mLock) {
mFilterList.clear();
mFilterList.addAll(filterItems);
filter();
}
notifyDataSetChanged();
}
/**
* FilterItemをアダプターにセットして、フィルターを反映させます
*
* @param filterItems
*/
public void addFilterItem(FilterItem filter) {
Log.d(TAG, "addFilterItem");
synchronized (mLock) {
mFilterList.clear();
mFilterList.add(filter);
filter();
}
notifyDataSetChanged();
}
/**
* 時間制約(公開一秒前)によるフィルタリングを行います
*/
private void filterByTime() {
// 時間制限によるフィルター
ArrayList<BoardItem> filterdList = new ArrayList<>();
ArrayList<BoardItem> copyList = null;
copyList = new ArrayList<>(mFilterdlList);
for (Iterator<BoardItem> ite = copyList.iterator(); ite.hasNext();) {
BoardItem boardItem = (BoardItem) ite.next();
// 現在の日時
Calendar nowcal = Calendar.getInstance();
// 比較対象日時
Calendar dateCal = Calendar.getInstance();
try {
dateCal.setTime(mSimpleDateFormat.parse(boardItem.getPublishDate()));
} catch (ParseException e) {
e.printStackTrace();
}
// long型の差分(ミリ秒)
long diffTime = nowcal.getTimeInMillis() - dateCal.getTimeInMillis();
if (diffTime > -1000) {
filterdList.add(boardItem);
}
}
mPublishList = filterdList;
}
/**
* フィルター作業を行います
*/
private void filter() {
ArrayList<FilterItem> filterList = null;
filterList = new ArrayList<>(mFilterList);
if (filterList.size() == 0) {
mFilterdlList = new ArrayList<>(mOriginalList);
filterByTime();
return;
}
ArrayList<BoardItem> filterdList = new ArrayList<>();
ArrayList<BoardItem> copyList = null;
copyList = new ArrayList<>(mOriginalList);
BoardItem: for (Iterator<BoardItem> ite = copyList.iterator(); ite.hasNext();) {
BoardItem item = (BoardItem) ite.next();
for (Iterator<FilterItem> iteFilter = filterList.iterator(); iteFilter.hasNext();) {
FilterItem filterItem = (FilterItem) iteFilter.next();
if (filterItem.isSelected()) {
if (filterItem.match(item.get(filterItem.getGroupName()))) {
filterdList.add(item);
break BoardItem;
}
}
}
}
mFilterdlList = filterdList;
filterByTime();
return;
}