Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/184.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.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 如何在通过刷卡使用关闭应用程序时保持线程活动_Android_Multithreading_Swipe - Fatal编程技术网

Android 如何在通过刷卡使用关闭应用程序时保持线程活动

Android 如何在通过刷卡使用关闭应用程序时保持线程活动,android,multithreading,swipe,Android,Multithreading,Swipe,我的应用程序结果页面中有一个线程。它每分钟都在计算数值。 我的问题是,当用户通过从最近的应用程序中刷卡关闭应用程序时,线程正在停止。但它必须起作用 我知道我可以为它创建一个ServiceIntentService,但这是我的第一个应用程序,我为此编写了很多代码,而且线程会更改结果活动页面上的值。所以那对我来说是一个很好的手术 我找了那么多,但找不到答案。你能不能给我一个建议,如果我能让那根线活得很容易 谢谢将您的线程放到前台服务 通常情况下,当用户从最近的应用中刷出你的应用时,整个虚拟机都会被杀

我的应用程序结果页面中有一个线程。它每分钟都在计算数值。 我的问题是,当用户通过从最近的应用程序中刷卡关闭应用程序时,线程正在停止。但它必须起作用


我知道我可以为它创建一个ServiceIntentService,但这是我的第一个应用程序,我为此编写了很多代码,而且线程会更改结果活动页面上的值。所以那对我来说是一个很好的手术

我找了那么多,但找不到答案。你能不能给我一个建议,如果我能让那根线活得很容易


谢谢

将您的线程放到前台
服务

通常情况下,当用户从最近的应用中刷出你的应用时,整个虚拟机都会被杀死。但在Android的最新版本中,前台服务并没有被终止。(感谢您让我注意到这一变化。)在旧版本的Android上,甚至前台服务也被取消了。这是我的。不幸的是,谷歌因不恰当地以“过时”来结束问题而臭名昭著,因此除了测试不同的设备外,没有办法知道它何时被修复。(或者甚至是故意修复的,或者是由于其他一些更改而意外修复的。)我相当肯定,Android 4.4中的前台服务已经被终止。它们在安卓5.1中并没有消亡,至少在我的设备上是如此,包括曾经运行4.4的设备。但是请注意关于5.1和6.0中前台服务被终止的错误报告的评论。这可能是因为它从未真正被修复过,而且它仍然是命中或未命中的

请注意,无论VM是否被终止,前台服务都将始终被调用。(至少在我的测试中是这样。)

您可以通过将以下代码放入“活动”中来测试VM是否被杀死:

private static final long vmInitTime = System.currentTimeMillis();

// in onCreate(...)
((TextView) findViewById(R.id.timeView)).setText(new Date(vmInitTime).toString());

只要同一个VM正在运行,显示的时间就不会改变。(或者更准确地说,只要存在与活动类相同的定义。实际上,
类加载器
与VM具有相同的生存期。)

如果向用户显示通知有意义,您可以在前台服务中运行线程。在这种情况下,只要设备没有强制停止应用程序,服务将继续在许多设备上运行。

“该线程也会更改结果活动页上的值”-用户清除任务后,没有“结果活动页”。该活动将被破坏。“当用户从最近的任务中删除您的任务时,整个VM和OS级别的进程将被终止”-这在许多设备上都不是真的,也许大多数设备都是这样。Krumwide看起来您在大多数情况下都是正确的,但是,如果应用程序进程中有前台服务运行,则该进程不会被终止。@SteveM看起来您在5.1上是对的,尽管过去的情况是,即使前台服务也会被终止。这是我的。谷歌因不恰当地以“过时”结束问题而臭名昭著,因此无法确切知道它是何时修复的。