在android開發中,如何寫一個不被幹掉的service一直是一個大問題。
尤其是現在這麼多一鍵加速的app,分分鐘讓你的服務被幹掉。
總結一下,從2.x版本一路走來,大家也研究了很多保護service不被幹掉的方法:
1. 最基本的,不要用bindService去開啓一個服務,而是用startService,因爲前者會將activity與service綁定到一起,當你的activity掛掉時,service也會掛掉,而大家都知道,當你的activity在後臺運行時,是非常容易被系統釋放掉的。
2. 其次,你可以在onStartCommand方法中,返回START_STICKY,其實這並不能保證服務不被幹掉,它只是表示該服務被幹掉後會自動重啓。但是這並不是一個特別好的辦法,因爲你是無法控制重啓的時間的
3. 設置android:process爲獨立進程。
4. 開啓一個前置服務:
這個詳細說一下。其實是你先開啓了一個服務,然後把這個服務給設置成前置的,對應的,要聲明一個Notification在推送欄裏,我想這是android防止大家都偷偷摸摸的開前置服務吧:
//開啓一個前置服務
Notification notification = new Notification(R.drawable.ic_launcher, getText(R.string.app_name),
System.currentTimeMillis());
Intent notificationIntent = new Intent(context, MainActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(context, 0, notificationIntent, 0);
notification.setLatestEventInfo(context, getText(R.string.action_settings),
getText(R.string.definition_High), pendingIntent);
startForeground(1, notification);
需要注意一點,startForeground(1, notification);
的第一個參數如果是0,那不會在推送欄顯示Notification