使用startForeground让android服务前台运行

最近在使用android 4.1系统的时候,发如今手机休眠一段时间后(1-2小时),后台运行的服务被强行kill掉,有多是系统回收内存的一种机制,要想避免这种状况能够经过startForeground让服务前台运行,当stopservice的时候经过stopForeground去掉。html

如下是android官方描述: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.app

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.less

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:ide

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.ui

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.this

For more information about notifications, see Creating Status Bar Notifications.spa

要想实现需求,咱们只须要在onStartCommand里面调用 startForeground,而后再onDestroy里面调用stopForeground便可! code

实际状况就譬如手机里面的音乐播放器同样,无论手机如何休眠,只要开始播放音乐了,就不会kill掉这个服务,一旦中止播放音乐,服务就可能被清掉。orm

FYI

相关文章
相关标签/搜索