2017-02-04 56 views
0

这是我的主要活动:如何保持的AsyncTask当用户关闭应用程序

@Override 
public void onBackPressed() { 

    super.onBackPressed(); 
    finish(); 
    moveTaskToBack(true); 
    System.exit(0); 
} 

我想AsyncTask继续数据放在我的服务器在后台在用户关闭应用程序后。

+0

您需要熟悉服务 –

+0

Duplicate - http://stackoverflow.com/questions/39507506/how-to-execute-background-task-when-android-app-is-closed-set-to-background和http://stackoverflow.com/questions/39507506/how-to-execute-background-task-when-android-app-is-closed-set-to-background –

+0

让自己适应服务 –

回答

2

我希望AsyncTask在用户关闭应用程序后在后台继续将数据放入服务器。

AsyncTask目的是执行后台任务已经超出了一个Activity的生命周期的范围。当从线程池中分配后台线程时,一旦任务结束,它就会返回它。即不能使用AsyncTask,因为所需时间不确定。

什么是在寻找适合的是Services在Android。

为什么即使使用AsyncTask如果我们有服务?

嘛,说比如你需要从一个ActivityButton的点击下载图像/歌曲或您需要执行,将需要一些时间来完成其执行的任务。从主线程(也称为UI线程)执行这些任务是一种糟糕的方法,并且会使您的应用程序变得迟钝并最终导致ANR。所以这些任务是从一个单独的线程异步处理,以保持应用程序黄油顺利。

+0

到目前为止,我从来没有听说过服务。肯定会检查出来。 – grant

+0

这是成为社区一员的最好的部分。你学习新的东西并分享新的东西:) – OBX

+0

为什么即使使用AsyncTask如果我们有服务? – grant

0

你必须检查服务和/或IntentServices

1

服务是解决方案的一部分,但要注意服务前台线程上运行。你会想从服务中运行你的AsyncTask,以确保它继续在后台线程上运行。

就个人而言,我会使用服务建议有利于JobScheduler,或者如果你需要支持低于API 21设备,Evernote的的JobManager(这也有点更容易使用)。这些将帮助您在适当的时间安排后台操作,以最大限度地减少电池使用或设备空闲时的时间。使用设备资源时成为一个好公民很重要。

+0

'System.exit(0);'完成一项服务吗? – grant

+0

@grant System.exit(0)将停止服务。它基本上会崩溃应用程序进程。但是,服务可能会重新启动,具体取决于您创建的服务类型。如果该服务是所谓的粘滞服务(https://developer.android.com/reference/android/app/Service.html#START_STICKY),那么操作系统将重新启动您的服务,这当然会重新启动该过程。 – dhaag23

相关问题