最近在使用android 4.1系统的时候,发现在手机休眠一段时间后(1-2小时),后台运行的服务被强行kill掉,有可能是系统回收内存的一种机制,要想避免这种情况可以通过startForeground让服务前台运行,当stopservice的时候通过stopForeground去掉。
以下是android官方描述:
Running a Service in the Foreground
A foreground service is a service that's considered to be something the user is actively aware of and thus not a candidate for the system to kill when low on memory. A foreground service must provide a notification for the status bar, which is placed under the "Ongoing" heading, which means that the notification cannot be dismissed unless the service is either stopped or removed from the foreground.
For example, a music player that plays music from a service should be set to run in the foreground, because the user is explicitly aware of its operation. The notification in the status bar might indicate the current song and allow the user to launch an activity to interact with the music player.
To request that your service run in the foreground, call startForeground(). This method takes two parameters: an integer that uniquely identifies the notification and the Notification for the status bar. For example:
Notification notification = new Notification(R.drawable.icon, getText(R.string.ticker_text),
System.currentTimeMillis());
Intent notificationIntent = new Intent(this, ExampleActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(this, 0, notificationIntent, 0);
notification.setLatestEventInfo(this, getText(R.string.notification_title),
getText(R.string.notification_message), pendingIntent);
startForeground(ONGOING_NOTIFICATION, notification);
To remove the service from the foreground, call stopForeground(). This method takes a boolean, indicating whether to remove the status bar notification as well. This method does not stop the service. However, if you stop the service while it's still running in the foreground, then the notification is also removed.
Note: The methods startForeground() and stopForeground() were introduced in Android 2.0 (API Level 5). In order to run your service in the foreground on older versions of the platform, you must use the previoussetForeground() method—see the startForeground() documentation for information about how to provide backward compatibility.
For more information about notifications, see Creating Status Bar Notifications.
要想实现需求,我们只需要在onStartCommand里面调用 startForeground,然后再onDestroy里面调用stopForeground即可!
实际情况就譬如手机里面的音乐播放器一样,不管手机如何休眠,只要开始播放音乐了,就不会kill掉这个服务,一旦停止播放音乐,服务就可能被清掉。
分享到:
相关推荐
- 如果应用与Service有绑定关系,保持连接也可以防止Service被杀死,因为系统倾向于保持已绑定的Service运行。 总之,要保证Android Service不被杀死,开发者需要综合运用上述策略,结合实际需求选择最适合的方法...
然而,Android系统的进程管理机制却为开发者带来了挑战,尤其是如何保护应用程序(APP)的进程不被系统轻易回收。本文将深入探讨Android进程管理机制,介绍进程保护的概念,并提出一种实用的进程保护方案。 1. ...
在Android开发中,Service是一种重要的组件,用于执行长时间运行的操作,如播放音乐或与服务器通信。...同时,过多地防止Service被kill可能会影响用户体验,因此在实际开发中需权衡性能和功能的需求。
这将为服务分配更高的优先级,使其在系统资源紧张时也更不容易被系统回收。同时,系统会显示一个通知,告知用户有一个服务正在运行。 2. **绑定服务**:通过其他组件(如Activity)绑定到服务,可以增加服务的生命...
在相机使用场景下,可以在拍照期间启动一个前台服务,确保进程不会轻易被系统回收。以下是一个简单的启动前台服务的示例: ```java NotificationCompat.Builder builder = new NotificationCompat.Builder(this);...
它可能包含代码示例、教程或者工具,教用户如何编写代码以防止进程被系统轻易杀死。 总之,让Android进程“死而复活”并保持永存涉及多个层面,包括正确使用服务、后台任务、权限管理和系统优化设置。尽管如此,...
在Android系统中,应用进程通常在用户不使用它们时被系统自动回收,以优化系统资源的使用。然而,有些应用程序需要在后台持续运行,比如音乐播放器、消息推送服务等,这时就需要用到"守护进程"(AppDaemon)来确保...
3. **IntentService**:另一种防止进程被轻易杀死的方法是使用IntentService。IntentService会在单独的工作线程中处理请求,完成任务后自动停止自身,这降低了被系统清理的风险。 4. **BroadcastReceiver**:注册一...
- `startForeground()`方法可以将Service提升为前台进程,确保其不会轻易被系统回收。 - 使用`IntentService`,它默认在单独的进程中运行,任务完成后自动停止,有助于进程管理。 4. **优化策略** - 适当使用`...
- `MyService`可能会包含调用`startForeground()`的方法,创建并显示通知,确保服务不会轻易被系统回收。 5. **通知(Notification)** - 通知是与用户交互的重要途径。在实现前台服务时,需要创建一个具有适当...
在Android开发领域,"1像素保活大法"是一种常见的应用保活策略,它通过创建一个极小的、几乎不可见的Activity来防止系统因内存不足或其他原因而将其关闭。这个方法尤其在处理后台服务或者后台任务时非常有用,因为...
强引用是最常见的引用类型,Java虚拟机不会轻易回收强引用的对象。软引用在内存不足时会被回收,适用于缓存场景。弱引用在GC扫描时会被立即回收,适合快速回收不重要的对象。虚引用主要用于跟踪对象,帮助在对象被...
在启动拍照功能前,启动一个带有通知的前台服务,可以防止系统因内存压力而轻易地回收Activity。 3. **定制插件**:正如提到的`foreground-camera-plugin`,这是一个专门为解决此类问题设计的PhoneGap插件。使用...
为了安全起见,可以设定口令的最小长度,以防止口令被破解。 打开注册表编辑器,找到主键: “HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Polices\ Network”键下。 在右侧窗口中新建二进制...
- `onDestroy()`:Activity将被销毁时调用,可能是系统回收或开发者手动调用。 3. **退出应用的常见方法** - **后退栈管理**:Android使用后退栈管理Activity,每次启动新的Activity,都会压入栈顶,按后退键则从...
标题中的"Never Rick"可能是在借用瑞克·阿什利(Rick Astley)的经典歌曲《Never Gonna Give You Up》的歌词,表达Android系统或应用程序不会轻易崩溃或出现问题,始终能够为用户提供稳定的服务。 描述中的"Android...
Java是一种广泛使用的面向对象的编程语言,由Sun Microsystems的詹姆斯·高斯林于1995年推出,现已被Oracle公司所拥有。Java的设计理念是“一次编写,到处运行”,因为它的可移植性极强,能在多种操作系统上运行。 ...
<<page 1>> page begin==================== 目 目目 目 录 录录 录 第一部分 C#语言概述.4 第一章 第一章第一章 第一章 .NET 编 编 ... 比尔....这一天 微软公司正式推出了其下一代...