Android:AsyncTask 运行时按下后退按钮

标签 android android-activity android-asynctask

我有一个 ActivityA,它有一个 Button。单击按钮 后,它会打开另一个ActivityB

ActivityB

onCreate() 方法,我正在启动 AsyncTask,它连接到服务器并获取结果并将其显示到屏幕上。

这是Activity B的代码:

public class ActivityB extends Activity {
    AsyncFetch asyncFetch;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        if(null != savedInstanceState) {
            return;
        }
        asyncFetch = new AsyncFetch();
        asyncFetch.execute();
    }
}


private class AsyncFetch extends AsyncTask<Object, Void, Object> {
    @Override
    protected void onPostExecute(Object o) {

    }

    @Override
    protected Object doInBackground(Object... params) {
        //contacts the http server.
    }
}

在执行 AsyncFetch 时,当我回击时,ActivityB 没有立即被销毁。但是在 AsyncTask 完成后被销毁。

我如何实现此操作以避免后按卡住?我在下面尝试过:

@Override
protected void onDestroy() {
    asyncFetch.cancel(true);
    super.onDestroy();
}

但它仍然等待 AsyncTask 取消或完成。

GMail 应用程序,当我打开某些东西时。在此过程中,如果我按下后退按钮,它就会从那个 Activity 中出来。

还有其他实现后台进程的方法吗?任何设计模式来实现这个?请告诉我。

感谢任何帮助。

最佳答案

只需自己处理 onBackPressed() 方法:

@Override
public void onBackPressed()
{
    if (asyncFetch != null)
        asyncFetch.cancel(true);

    super.onBackPressed();
}

关于Android:AsyncTask 运行时按下后退按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26421041/

相关文章:

java - 即使调用者 Activity 被销毁,短时间运行的 Android 后台任务也可以安全地被忽略,对吗?

android - 异步任务与服务下载数据

android - Oauth2登录到谷歌帐户Android

java - 从历史记录中清除 Activity 会卸载应用程序

android - fragment 中的 AsyncTask 不更新 UI

android - 我在多处使用 AsyncTask 进行闪屏和数据库加载。这是一个好主意吗?

android - NavigationDrawer Activity 充斥着 fragment 回调和应用程序业务逻辑

java - Android东西:使用命令writeBuffer,write,byte []在i2c寄存器中写入许多字节

android - "IntentReceiver components are not allowed to register to receive intents"尝试确定电池电量时

android - Android 2.2 中每个帐户的帐户首选项,而不是帐户类型