Android aSyncTask并开始另一个活动
问题描述:
我已经把这个内部类作为一个应用程序的一部分,它不接受方向的变化(它在横向上更有意义)。Android aSyncTask并开始另一个活动
private class initialDBQuery extends AsyncTask<SQLiteDatabase, Void, Cursor> {
@Override
protected Cursor doInBackground(SQLiteDatabase... params) {
final SQLiteDatabase mDatabase = params[0];
mCursor = mDatabase.rawQuery("SELECT * FROM database", null);
return mCursor;
}
@Override
protected void onPostExecute(Cursor c){
ParentActivity.this.mCursor = mCursor;
ParentActivity.this.updateQuery();
mDatabase.close(); //Close database connection ASAP
}
// can use UI thread here
protected void onPreExecute() {
ParentActivity.this.mAnimalPager = null;
Toast.makeText(ParentActivity.this.getBaseContext(), "Loading Database...", Toast.LENGTH_SHORT).show();
}
}
我的主UI具有多个按钮,其导致不同的活动,其功能之一是通过意图到主活性(ParentActivity),然后将执行搜索来提供搜索标准。主要活动的其余部分是一个viewpager,它依赖于从AsyncTask返回的游标(此更新工作正常)。
我的问题是:使用此代码我,我按下其中一个屏幕上的按钮(启动另一个活动),而asynctask正在运行,然后我得到错误“无法暂停活动”。
当应用程序暂停时,需要采取什么措施来处理AsyncTask的运行?
感谢,男
答
我在这里遇到的问题实际上是与我对主要活动的viewpager有关。
由于AsyncTask为PagerAdapter创建了一个游标,我没有设置适配器直到它完成。当没有设置适配器时,ViewPagers和onPause存在已知问题(请参见here)。
为了克服这个我修改我的适配器,返回0;如果没有可用的适配器光标:
public int getCount() {
// return the size of the cursor if it has been instantiated;
return (mCursor !=null) ? mCursor.getCount() : 0 ;
}
,并添加了setCurrentCursor方法适配器。通过这种方式,我可以设置适配器并将其绑定到onCreate中的viewpager,然后在光标从ASyncTask变为可用时将其添加到适配器;
public void setCurrentCursor(Cursor cu){
this.mCursor = cu;
this.notifyDataSetChanged();
}
现在我所要做的就是调用adapter.setCurrentCursor中的AsyncTask的onPostExecute方法传入创建光标。
希望这会有所帮助。
谢谢, m
您有一个错误,您需要修复它。发布完整的堆栈跟踪,也许有人可以给你一个问题是什么问题。 –
你好 - 最初我在代码中暂停了一下,看是否可以在asynctask运行时加载其他活动。这是造成问题。当我添加堆栈跟踪时,你需要想象的是等待运行 – mAndroid