如何强制申请保持开放?

时间:2013-04-01 20:22:47

标签: java android memory

我已经看到Lookout,JuiceDefender和MagicJack等应用程序无限期地在后台运行,除非用户直接通过任务管理器强制关闭。 (即便如此,在Gingerbread中,除非你浏览设置中“Downloaded Apps”下运行的应用程序,否则它将关闭它,一旦你进入菜单,你可以选择管理应用程序“清除记忆“和”强制关闭“。

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

5 个答案:

答案 0 :(得分:1)

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

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

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

最重要的是,您可以register a broadcast receiver获取BOOT_COMPLETED事件,以便在设备重新启动时重新启动服务。但是,请记住,这可能会导致手机电池耗尽,因此请注意您在服务中所做的事情。

答案 1 :(得分:1)

我相信这些应用在其活动开始时(即调用Service时)会启动onCreate()

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

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

  

前台服务是一种被认为是某种东西的服务   用户积极地意识到并因此不是系统的候选者   在内存不足时杀人。

答案 2 :(得分:0)

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

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

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

答案 3 :(得分:0)

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

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

答案 4 :(得分:0)

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

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

/托马斯