请选择 进入手机版 | 继续访问电脑版
  • 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

android - 按下后退按钮时如何停止异步任务执行

[复制链接]
菜鸟教程小白 发表于 2022-12-9 06:16:47 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

请我有一个包含异步任务方法的 Activity ,即使用户从该页面移动,此异步任务方法也会继续在后台执行。请问有没有办法在用户按下后退按钮或从该页面移动到另一个页面时立即停止异步任务执行。

以下是我尝试过的,但它不起作用

private AsyncTask totalLikesAsync;


@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity);
    context = this;

   totalLikesAsync = new TotalLikes().execute(msgID);
}






@Override
public boolean onCreateOptionsMenu(Menu menu) {
    MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.main, menu);

    return true;
}

@Override
public boolean onOptionsItemSelected(MenuItem menuItem) {
    switch (menuItem.getItemId()) {
        case android.R.id.home:

            totalLikesAsync.cancel(true);
            this.finish();
            break;

        case R.id.share:
            new ShareImage().execute(msgImage);
        default:
            return super.onOptionsItemSelected(menuItem);
    }
    return true;
}





private class TotalLikes extends AsyncTask<String, String, JSONObject> {

    @Override
    protected void onPreExecute() {
        super.onPreExecute();

    }



    @Override
    protected JSONObject doInBackground(String... msgIDs) {
        UserFunctions userFunction = new UserFunctions();

        String msgsID = msgIDs[0];
        JSONObject json=null;

        if(!isCancelled()){

            //This gets all the information unread from the server
            json = userFunction.TotalLikes(context, msgsID);
        }

        return json;
    }

    @Override
    protected void onPostExecute(JSONObject json) {
        /**
         * Checks for success message.
         **/
        if (json != null) {

            ...
        } else {

           ...
        }

}
}

更新

在测试了以下所有答案后,它们都允许在异步任务中执行 doinbackground,即使按下后退按钮也是如此。我想要一种情况,即一旦按下后退按钮,背景就会被取消。



Best Answer-推荐答案


@Override
public void onBackPressed() {
    super.onBackPressed();
    if (totalLikesAsync != null && totalLikesAsync.getStatus().equals(AsyncTask.Status.RUNNING)) {
        totalLikesAsync.cancel(true);
    }
} 

关于android - 按下后退按钮时如何停止异步任务执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33935432/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap