Android 如果我的应用程序在后台,doInBackground是否仍然运行?
我有一个launcher风格的应用程序,你可以在其中启动另一个应用程序。当那个应用程序启动时,我想让我的应用程序记录一些事情,基本上是记录时间等等 我有一段代码,其结构基本上如下所示:Android 如果我的应用程序在后台,doInBackground是否仍然运行?,android,asynchronous,Android,Asynchronous,我有一个launcher风格的应用程序,你可以在其中启动另一个应用程序。当那个应用程序启动时,我想让我的应用程序记录一些事情,基本上是记录时间等等 我有一段代码,其结构基本上如下所示: appSelectedListener{ runSelectedApp; private class Background extends AsyncTask<Void, Void, Void>{ protected void doInBackground(){
appSelectedListener{
runSelectedApp;
private class Background extends AsyncTask<Void, Void, Void>{
protected void doInBackground(){
//executable code
}
}
}
appSelectedListener{
runSelectedApp;
私有类后台扩展异步任务{
受保护的void doInBackground(){
//可执行代码
}
}
}
如果代码关闭了,我很抱歉,但是我还没有写任何东西,我只是想先处理一下这些东西。我的问题是,当所选的应用程序被带到前台时,我的应用程序会转到后台。doInBackground()中的可执行代码是否仍在运行?或者我的应用程序一定要在前台吗
doInBackground()中的可执行代码是否仍在运行
通常。您分叉的线程的行为不会立即受到前台/后台注意事项的影响
最终,后台应用程序的进程将被终止,以便为其他应用程序释放内存,或者因为用户请求终止该进程。此时,所有后台线程(以及RAM中的所有其他线程)都将消失。如果您有一个
AsyncTask
尚未到达doInBackground()
,则在这种情况下不会调用doInBackground()
。澄清一下:说doInBackground()在后台运行有点用词不当。它与UI线程在单独的线程上运行,但与应用程序的其余部分在同一进程中运行(在单独进程中运行的任何组件除外)。UI线程是最高优先级的,Android系统会采取措施确保其他线程和进程不会干扰它
当事件导致新活动的UI线程优先时,所有其他UI线程都会暂停。其他非UI线程可能会继续,也可能不会继续,这取决于各种因素
另外,请记住,当用户更改设备的方向时,Android的默认行为是调用onDestroy(),然后调用活动的onCreate()方法。这将销毁AsyncTask对象,该对象将销毁用于异步工作的非UI线程,这实际上会取消doInBackground()中代码的执行
出于这个原因,您应该使用AsyncTask来执行简短的操作,如果这些操作在完成之前被取消,您不介意重复这些操作。长时间运行的操作(如从服务器下载)应由IntentService或同步适配器完成。在后台终止应用程序的一般时间跨度是多少?它是几分钟还是几小时?@mike:可能是几毫秒到几天。“这会破坏AsyncTask对象”--不,不会。
AsyncTask
将愉快地继续运行。它是否有用完全是另一回事,这就是为什么应该保留AsyncTask
(例如,由保留片段管理),以便当任务完成时,它可以将其结果传递给有意义的东西。