-2

我见过像 Lookout、JuiceDefender 和 MagicJack 这样的应用程序会无限期地在后台运行,除非用户直接通过任务管理器强制关闭。(即使那样,在 Gingerbread 中,它也不会关闭,除非您浏览到在设置中的“已下载应用程序”下运行的应用程序,并在您进入可以管理应用程序的选项菜单时强制关闭它,例如“清除内存”和“强制关闭”。

我想知道这是如何实现的?我需要为我的应用程序做类似的事情,但我不知道如何避免 Android 操作系统的自动任务终止。不要说这是不可能的,因为如果这是真的,JuiceDefender、MagicJack 和 Lookout 不会工作。

4

5 回答 5

1

您可以拥有的是无限期地保持活力的服务。您在 Service 的 onStartCommand 方法上实现了返回 Service.START_STICKY 。

每当操作系统需要资源并选择终止您的应用程序时,一旦资源再次可用,您的服务就会重新生成。

请记住,拥有持续运行的应用程序会导致手机电池消耗。您应该(至少)通知用户您的应用程序在后台仍处于活动状态。

最重要的是,您可以为 BOOT_COMPLETED 事件注册一个广播接收器,以便在设备重新启动时重新启动您的服务。但是,请记住,这可能会导致手机电池耗尽,因此请注意您在服务中所做的事情。

于 2013-04-01T20:26:40.633 回答
1

我相信这些应用程序会Service在它们的 Activity 启动时启动(即何时onCreate()被调用)。

AService在应用程序暂停时继续运行。启动时Service,您可以返回START_STICKY您的onStartCommand.

此外,为了防止服务被 Android 的内存杀手杀死,您可以通过调用来指定您的服务对用户很重要startForeground()。Android 开发者网站指出:

前台服务是一种被认为是用户主动意识到的服务,因此不会在内存不足时被系统杀死。

于 2013-04-01T20:27:01.930 回答
0

我正在创建一个应用程序,我必须在 OnCreate() 中使用以下一个或多个超级函数:

onDestroy()
onPause()
onResume()
onSaveInstanceState()

从内存中完全关闭应用程序。并且也不要使用 Activity.finish() 方法。通常,Android 在需要内存时关闭应用程序做得很好,称为弹出堆栈并且不建议强行留在内存中,除非有非常非常好的理由。希望能帮助到你。您还可以查看 Android DOC 网站以获取更多信息和您请求的示例。

于 2013-04-01T20:29:01.157 回答
0

您需要启动一项服务。服务在后台运行,对推送警报很有用。这是一些关于它的链接:

http://developer.android.com/guide/components/services.html http://www.vogella.com/articles/AndroidServices/article.html

于 2013-04-01T20:29:13.533 回答
0

在服务 onStartCommand 方法中返回“START_STICKY”。

http://developer.android.com/guide/components/services.html

/托马斯

于 2013-04-01T20:32:26.910 回答