Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/317.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/3/android/178.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
Java 当我的Android应用程序不运行时,我如何保持它运行';你没有注意力吗?_Java_Android_Service_Android Asynctask - Fatal编程技术网

Java 当我的Android应用程序不运行时,我如何保持它运行';你没有注意力吗?

Java 当我的Android应用程序不运行时,我如何保持它运行';你没有注意力吗?,java,android,service,android-asynctask,Java,Android,Service,Android Asynctask,我如何让我的android应用程序在后台运行,即使它不再有焦点?现在发生的情况是,在被中断(例如,消息到达)之后,当它重新获得焦点时,它只是坐在那里,处理到中断点的任何内容。也许我的设计不是很好,因为我看不到任何明显的方法可以让它从中断的地方恢复。(设计的一个原因是,长时间运行的查询的输出必须立即给出中间结果,而不是在最后一次给出所有结果。) 我也希望能够切换到另一个应用程序,但保持我的应用程序处理。我想这和上面的情况是一样的 谷歌搜索出现了服务作为保持应用程序运行的一种方式,但有一次点击建议,

我如何让我的android应用程序在后台运行,即使它不再有焦点?现在发生的情况是,在被中断(例如,消息到达)之后,当它重新获得焦点时,它只是坐在那里,处理到中断点的任何内容。也许我的设计不是很好,因为我看不到任何明显的方法可以让它从中断的地方恢复。(设计的一个原因是,长时间运行的查询的输出必须立即给出中间结果,而不是在最后一次给出所有结果。)

我也希望能够切换到另一个应用程序,但保持我的应用程序处理。我想这和上面的情况是一样的

谷歌搜索出现了
服务
作为保持应用程序运行的一种方式,但有一次点击建议,如果用户必须与应用程序交互,就不要这样做,我的应用程序就是如此

我使用一个
Asynctask
创建我的数据库(一次;如果中断,到目前为止没有问题——在下一次执行时,我只是从中断的位置继续加载),另一个
Asynctask
查询它(这可能是一个非常长时间运行的任务),但这种方法并不能保证应用程序在后台运行。任何中断都会导致输出屏幕不完整和死机,或者将焦点返回到用户输入屏幕

查询功能(当前为
异步任务
)更改为
服务
是个好主意吗?甚至可行吗?(用户在查询期间不与应用程序交互。)

我目前有以下私人课程:

私有类数据库OpenHelper扩展了SQLiteOpenHelper

私有类LoadDatabase扩展异步任务

私有类QueryDB扩展异步任务

您的意见将不胜感激

编辑

下面的第一个答案表明,使用
服务
将有效

我想谷歌已经暗示,如果我扩展
IntentService
,我的任务会更简单

另一次编辑


是的,
IntentService
正是我所需要的。看见从
AsyncTask
更改为
IntentService
非常简单。

对于真正的后台任务,唯一的标准方法是服务,否则您的应用程序可能会被终止

异步任务的问题:

  • 非静态内部类可能导致内存泄漏
  • 它与流程的生命周期(而不是主机活动)相关联
  • 优先权
使用服务并向用户发送广播消息、表单通知

注意:默认情况下,服务在UI线程中运行,因此仍然必须使用线程


IntentService可以执行串行任务。如果您想要多个并行作业,请扩展服务

--谢谢。串行任务正常。不确定在这种情况下如何使用线程;我已经在几个桌面程序中成功地使用了线程,因此我认为这使我能够很好地为这个应用程序提供
服务。欢迎任何教程/示例。我会尝试。然后是来自(下载)的完整示例