Java 当我的Android应用程序不运行时,我如何保持它运行';你没有注意力吗?
我如何让我的android应用程序在后台运行,即使它不再有焦点?现在发生的情况是,在被中断(例如,消息到达)之后,当它重新获得焦点时,它只是坐在那里,处理到中断点的任何内容。也许我的设计不是很好,因为我看不到任何明显的方法可以让它从中断的地方恢复。(设计的一个原因是,长时间运行的查询的输出必须立即给出中间结果,而不是在最后一次给出所有结果。) 我也希望能够切换到另一个应用程序,但保持我的应用程序处理。我想这和上面的情况是一样的 谷歌搜索出现了Java 当我的Android应用程序不运行时,我如何保持它运行';你没有注意力吗?,java,android,service,android-asynctask,Java,Android,Service,Android Asynctask,我如何让我的android应用程序在后台运行,即使它不再有焦点?现在发生的情况是,在被中断(例如,消息到达)之后,当它重新获得焦点时,它只是坐在那里,处理到中断点的任何内容。也许我的设计不是很好,因为我看不到任何明显的方法可以让它从中断的地方恢复。(设计的一个原因是,长时间运行的查询的输出必须立即给出中间结果,而不是在最后一次给出所有结果。) 我也希望能够切换到另一个应用程序,但保持我的应用程序处理。我想这和上面的情况是一样的 谷歌搜索出现了服务作为保持应用程序运行的一种方式,但有一次点击建议,
服务
作为保持应用程序运行的一种方式,但有一次点击建议,如果用户必须与应用程序交互,就不要这样做,我的应用程序就是如此
我使用一个Asynctask
来创建我的数据库(一次;如果中断,到目前为止没有问题——在下一次执行时,我只是从中断的位置继续加载),另一个Asynctask
来查询它(这可能是一个非常长时间运行的任务),但这种方法并不能保证应用程序在后台运行。任何中断都会导致输出屏幕不完整和死机,或者将焦点返回到用户输入屏幕
将查询功能(当前为异步任务
)更改为服务
是个好主意吗?甚至可行吗?(用户在查询期间不与应用程序交互。)
我目前有以下私人课程:
私有类数据库OpenHelper扩展了SQLiteOpenHelper
私有类LoadDatabase扩展异步任务
私有类QueryDB扩展异步任务
您的意见将不胜感激
编辑
下面的第一个答案表明,使用服务
将有效
我想谷歌已经暗示,如果我扩展IntentService
,我的任务会更简单
另一次编辑
是的,
IntentService
正是我所需要的。看见从AsyncTask
更改为IntentService
非常简单。对于真正的后台任务,唯一的标准方法是服务,否则您的应用程序可能会被终止
异步任务的问题:
- 非静态内部类可能导致内存泄漏李>
- 它与流程的生命周期(而不是主机活动)相关联李>
- 优先权李>
IntentService可以执行串行任务。如果您想要多个并行作业,请扩展服务 --谢谢。串行任务正常。不确定在这种情况下如何使用线程;我已经在几个桌面程序中成功地使用了线程,因此我认为这使我能够很好地为这个应用程序提供
服务。欢迎任何教程/示例。我会尝试。然后是来自(下载)的完整示例