30 August 2010
android service crashed (restart)

如果你有支APP有個SERVICE是可能每隔一段時間去做一次的!

那麼我建議你改用AlarmManager。

最近發現自己寫的某支APP裡面的service會被android os restart!

大概知道是因為是background service的關係,

想要讓一個service keep alive。

當然有解決方法,在2.0以前的device,

可以使用setForeground(true);

但是2.0以上,這個method,失效了。

改成startForeground(id, notification)。

但我改用了AlarmManager

原因當然有很多,像是其實啟動一個service,就是啟動一個process。

想必就消耗掉一點memory...

當然還有其他原因,大家可以去Google一下。

實作方法如下:

public void onUpdate(Context context, AppWidgetManager appWidgetManager,int[] appWidgetIds) {
Intent intent = new Intent(context, receiverChange.class); //放入你每隔一段時間要執行的class
PendingIntent pendingIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
AlarmManager alarmManager = (AlarmManager) context.getSystemService(Context.ALARM_SERVICE);
//接著就是set一個repeat,這裡是設定每隔一分鐘去執行
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, System.currentTimeMillis() , (60*1000), pendingIntent);
}


然後您每隔一段時間要做的事情就寫在一個BroadcastReceiver裡面

public class receiverChangePicture extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("main","hi I receive message every minutes..");
}

}



這樣就完成了,但是注意此實作方法只限定於有週期性要執行的code才適用!!!!

如果今天你是要偵測sd card的狀態,那麼建議你還是用service!(就如同我上篇文章所說的)

以alarmManager來實作,只是節省一點成本罷了!









blog comments powered by Disqus