

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を継承したクラス

[code]

    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;
    }
    
[/code]


CC BY-SA 3.0
2015-06-07T13:47:51.107
11079
2016-07-21T00:23:32.860
3693
question
android java webview
AndroidにてFatal Signal 11 (SIGSEGV), code 1,


自己解決いたしました。

[code]

    filterItem.match(item.get(filterItem.getGroupName()))
    
[/code]

内部では、PatternクラスからMattcherを生成して、メンバ変数にもたせていましたが、それが原因のようです。都度Mattcherを生成するようにしたところ、Fatal
Signal Errorはでなくなりました。


CC BY-SA 3.0
2015-06-09T05:50:19.637
11159
2015-06-09T05:50:19.637
3693
11079
answer