执行 AsyncTask 时移至其他活动

Posted

技术标签:

【中文标题】执行 AsyncTask 时移至其他活动【英文标题】:Move to other activity when doing AsyncTask 【发布时间】:2017-06-01 11:12:23 【问题描述】:
private class MyTask extends AsyncTask<String, Integer, Integer> 
    int number;
    private String content = null;
    private boolean error = false;
    Context mContext;
    int NOTIFICATION_ID = 1;
    Notification mNotification;
    NotificationManager mNotificationManager;

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

    

    @Override
    protected Boolean doInBackground(String... args) 

        return true;
    

    @Override
    protected void onPostExecute(Integer result) 
        if (response) 

        //Build the notification using Notification.Builder
        Notification.Builder builder = new Notification.Builder(mContext)
                .setSmallIcon(R.mipmap.app_icon)
                .setAutoCancel(true)
                .setContentTitle(contentTitle)
                .setContentText(contentText);

        Intent intent = new Intent(mContext, CaptureActivity.class);
        intent.setAction(Intent.ACTION_MAIN);
        intent.addCategory(Intent.CATEGORY_LAUNCHER);

        PendingIntent pendingIntent = PendingIntent.getActivity(mContext, 0,
                intent, 0);
        builder.setContentIntent(pendingIntent);

        //Get current notification
        mNotification = builder.getNotification();

        //Show the notification
        mNotificationManager.notify(NOTIFICATION_ID, mNotification);
    

以上代码是我的异步任务的一部分。由于 doinbackground 的过程会有点长,我希望让用户有意图或移动到另一个页面,这样他们就不必等待太久,并且坚持那个活动。有没有办法在 doinbackground 开始时移动到另一个活动?此外,如果它可以在 doinbackgound 完成时弹出活动,那对我来说会很棒。非常感谢。

【问题讨论】:

您无法在 doInBackground 开始活动,而且您现在只剩下 onPostExecute 了。在那里你可以做任何 UI 任务。 在onPostExecute,任务已经完成doInBackground。这不适合我。 【参考方案1】:

在这种情况下,我建议使用ServiceIntentService 而不是AsyncTask - 如果doInBackground 很长,用户可以去其他活动,这可能会导致内存泄漏

【讨论】:

如果我想暂停应用程序但仍然运行异步任务,例如在 google play 中下载应用程序,有没有合适的方法来做到这一点?谢谢。 这是合适的方式 - 使用Service 谢谢。我应该将服务与 asynctask 一起使用吗?因为我想并行执行任务。 如果您需要移动到下一个活动而没有得到异步任务的响应,那么您不需要调用异步任务。您可以使用服务调用异步任务。 您不需要使用AsyncTask。如果你想做一些后台长时间运行的任务,你可以使用IntentService——它将在其他线程上运行。你也可以使用普通的Service,但是你必须使用一些Java Thread

以上是关于执行 AsyncTask 时移至其他活动的主要内容,如果未能解决你的问题,请参考以下文章

在 angular2 中显示和隐藏 div 时移至顶部

android asynctask 导致另一个活动

Async分析

UISearchController 的 UISearchBar 在活动时移出屏幕

android asynctask导致另一个活动

C# Async Await 注意事项