私はバックグラウンドでdbクエリを実行するAsyncTaskを拡張するネストされた内部クラスを持っています。しかし、一部のユーザーが持っている - これは正常に動作時間のほとんどAsyncTaskのpostExecuteメソッドがUIスレッドで実行されないのはなぜですか?
private void onCursorLoaded(Cursor c)
{
mPagerAdapter = new LeadDetailsFragmentPagerAdaper(getSupportFragmentManager());
mPager.setAdapter(mPagerAdapter);
mPager.setCurrentItem(iIndex, false);
}
:記事で私はこの
private class QueryRunner extends AsyncTask<Void,Void,Cursor> {
@Override
protected Cursor doInBackground(Void... voids)
{
return getContentResolver().query(LeadContentProvider.buildUri(app.getEntityId()),new String[]{LeadContentProvider._ID},null,null,LeadContentProvider.LEAD_STATUS_DATETIME +" desc");
}
@Override
protected void onPostExecute(Cursor c)
{
onCursorLoaded(c);
}
}
のようなものがonCursorLoaded方法がどのように見えるのビューを更新するために、親のメソッドを呼び出していますメソッドを実行しますこのスタックトレースでクラッシュします。
java.lang.IllegalStateException: Must be called from main thread of process
at android.support.v4.app.FragmentManagerImpl.execPendingActions(FragmentManager.java:1392)
at android.support.v4.app.FragmentManagerImpl.executePendingTransactions(FragmentManager.java:431)
at android.support.v4.app.FragmentPagerAdapter.finishUpdate(FragmentPagerAdapter.java:139)
at android.support.v4.view.ViewPager.populate(ViewPager.java:804)
at android.support.v4.view.ViewPager.setAdapter(ViewPager.java:344)
at com.servicemagic.pros.activities.LeadDetails.onCursorLoaded(LeadDetails.java:205)
at com.servicemagic.pros.activities.LeadDetails.access$200(LeadDetails.java:25)
at com.servicemagic.pros.activities.LeadDetails$QueryRunner.onPostExecute(LeadDetails.java:196)
at com.servicemagic.pros.activities.LeadDetails$QueryRunner.onPostExecute(LeadDetails.java:170)
at android.os.AsyncTask.finish(AsyncTask.java:417)
at android.os.AsyncTask.access$300(AsyncTask.java:127)
at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:429)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:150)
at android.os.HandlerThread.run(HandlerThread.java:60)
- なぜ、mainExecute()メソッドがMainThreadで呼び出されないのですか?
AsynkTaskを拡張する内部クラスをどのように定義しますか?コードを表示できますか? – hovanessyan
トップコードブロックを完全なAsycTaskコードで更新します。 – harmanjd
私は階層全体を意味します - 親クラス+内部クラス定義。親クラスはアクティビティですか? – hovanessyan