Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/217.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 如果我的应用程序在后台,doInBackground是否仍然运行?_Android_Asynchronous - Fatal编程技术网

Android 如果我的应用程序在后台,doInBackground是否仍然运行?

Android 如果我的应用程序在后台,doInBackground是否仍然运行?,android,asynchronous,Android,Asynchronous,我有一个launcher风格的应用程序,你可以在其中启动另一个应用程序。当那个应用程序启动时,我想让我的应用程序记录一些事情,基本上是记录时间等等 我有一段代码,其结构基本上如下所示: appSelectedListener{ runSelectedApp; private class Background extends AsyncTask<Void, Void, Void>{ protected void doInBackground(){

我有一个launcher风格的应用程序,你可以在其中启动另一个应用程序。当那个应用程序启动时,我想让我的应用程序记录一些事情,基本上是记录时间等等

我有一段代码,其结构基本上如下所示:

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
(例如,由保留片段管理),以便当任务完成时,它可以将其结果传递给有意义的东西。