繁体   English   中英

没有焦点时如何保持我的Android应用运行?

[英]How do I keep my Android app running when it doesn't have focus?

即使不再具有焦点,如何保持我的android应用在后台运行? 现在发生的事情是,在被打扰(例如,一条消息到达)之后,当它重新获得焦点时,它只是坐在那里,处理完一切直到中断点。 可能我的设计不太好,因为我看不到从中断的地方恢复它的明显方法。 (设计的原因之一是,必须将长时间运行的查询的输出立即提供中间结果,而不是在最后一次给出所有中间结果。)

我还希望能够切换到另一个应用程序,但继续处理我的应用程序。 我想这与上述情况相同。

使用谷歌搜索service来保持应用程序运行,但有人建议不要在用户必须与应用程序进行交互的情况下执行此操作(我的应用程序就是这种情况)。

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

查询功能(当前为AsyncTask )更改为service会是一个好主意吗? 可行吗? (用户在查询期间不会与应用进行交互。)

我目前有以下私人班级:

private class DatabaseOpenHelper extends SQLiteOpenHelper

private class LoadDatabase extends AsyncTask<Object, Integer, Void>

private class QueryDB extends AsyncTask<Object, String, Void>

您的输入将不胜感激。

编辑

下面的第一个答案表明使用Service可以正常工作。

我认为Googling建议,如果我扩展IntentService ,我的任务将会更简单。

另一个编辑

是的, IntentService正是我所需要的。 看到这个 AsyncTask更改为IntentService非常简单。

对于真正的后台任务,唯一的标准方法是服务,否则您的应用可能会被杀死。

AsyncTask问题:

  • 非静态内部类可能导致内存泄漏;
  • 它与流程的生命周期(而不是宿主活动)息息相关;
  • 杀人清单中的优先权 ;

使用服务并发送广播消息,向用户形成通知。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM