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的运行?

感谢,男

+0

您有一个错误,您需要修复它。发布完整的堆栈跟踪,也许有人可以给你一个问题是什么问题。 –

+0

你好 - 最初我在代码中暂停了一下,看是否可以在asynctask运行时加载其他活动。这是造成问题。当我添加堆栈跟踪时,你需要想象的是等待运行 – mAndroid

我在这里遇到的问题实际上是与我对主要活动的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然后再开始另一个活动可能是你的工作。

+0

我真的不想取消它。即使开始不同的活动,它也能继续运行是正确的。 – mAndroid

+0

如果你想运行,即使一个不同的活动开始,然后使用服务,并把你的逻辑,如果有可能在你的情况。 – Vijay

+0

是否意味着在父UI用户活动暂停时不能运行AsyncTask? – mAndroid