1

こんにちは私はAndroid3.2で開発しており、非同期タスクを使用してワーカースレッドでSQLクエリを実行し、UIスレッドでリストビューにデータを入力するアクティビティがあります。どういうわけか時々私は得る

06-20 15:25:00.270: E/StrictMode(6353): class com.abc.activity.ElencoOrdiniActivity; instances=2; limit=1
06-20 15:25:00.270: E/StrictMode(6353): android.os.StrictMode$InstanceCountViolation: class com.abc.activity.ElencoOrdiniActivity; instances=2; limit=1
06-20 15:25:00.270: E/StrictMode(6353):     at android.os.StrictMode.setClassInstanceLimit(StrictMode.java:1)

それは私のせいですか?非同期タスクはコンテキストを保持しませんが、MyActivity.thisを使用します

これがコードです

    AsyncTask<Void, Void, List<JSONArray>> async = new AsyncTask<Void, Void, List<JSONArray>>()
    {

        @Override
        protected List<JSONArray> doInBackground(Void... params) {



            MyApp appState = ((MyApp)getApplicationContext());


            cursor_ordini = getHelper().getReadableDatabase().rawQuery("...");
            cursor_ordini.moveToFirst();

            List<JSONArray> ordini = new Vector<JSONArray>();
            if (cursor_ordini.getCount() > 0)
            {
                ....
                return ordini;

            }
            return null;
        }

        @Override
        protected void onPostExecute(List<JSONArray> ordini) {
            super.onPostExecute(ordini);

            MyApp appState = ((MyApp)getApplicationContext());


            ListView listView = (ListView) ElencoOrdiniActivity.this.findViewById(R.id.listView_elenco_ordini);
            listView.setAdapter( new OrdiniAdapter(ElencoOrdiniActivity.this, R.layout.elenco_ordini_instestazione, ordini));
            listView.setOnScrollListener( new EndlessOrdiniScrollListener(ElencoOrdiniActivity.this, appState.getDittaIdSelezionata(), "") );

        }

    };

    async.execute();
4

1 に答える 1

0

これが古い投稿であることは知っています。この問題の解決策と説明を探している人向けです。

InstanceCountViolation 例外がある場合は、Android SDK での detectActivityLeaks チェックの実装方法に関連するアクティビティ リークまたは問題が実際に発生している可能性があることを意味します。

これが問題であるかどうかを特定するには、次の投稿をお勧めします: Android でのリークされたアクティビティの検出。Android フレームワークに関係のないこのアクティビティへの参照を保持しているオブジェクトがある場合は、問題があり、修正する必要があります。

Android フレームワークに関連しないこのアクティビティへの参照を保持するオブジェクトがない場合は、detectActivityLeaks チェックの実装方法に関連する問題が発生したことを意味します。この場合、detectActivityLeaks をオフにせずに失敗したアクティビティの問題を修正するには、次の例のように、デバッグ構成でアクティビティを開始する前にSystem.gc()を実行するだけです。

 if (BuildConfig.DEBUG)
 {         
     System.gc();
 }

 Intent intent = new Intent(context, SomeActivity.class);
 this.startActivity(intent);

詳細については、この回答を参照してください。

于 2014-08-11T21:31:01.283 に答える