我在實現定期運行的服務時遇到了一些困難。 當屏幕開啓時,應用程序可以正常工作,即使應用程序已從最近的任務中刪除。但是當設備被鎖定時,應用會停止,即使屏幕再次打開,服務也不會返回。 我已經實現了一個WakefulBroadcastReceiver對SCREEN_ON的動作,但它只在應用程序處於活動狀態時才起作用,當只有一個服務在運行時它不起作用。 服務和WakefulBroadcastReceiver聲明這樣在我AndroidManifest:當屏幕鎖定時,AlarmManager不起作用
<service android:name=".FeedService" />
<receiver android:name=".AutoStart">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
<action android:name="android.intent.action.SCREEN_ON" />
</intent-filter>
</receiver>
我還增加了以下權限到我的AndroidManifest文件:
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
這是我WakefulBroadcastReceiver:
public class AutoStart extends WakefulBroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Feed", "AutoStart.onReceive");
context.startService(new Intent(context, FeedService.class));
}
}
這是我的服務:
public class FeedService extends Service {
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.d("Feed", "FeedService.onStartCommand");
stopSelf();
return START_STICKY;
}
@Override
public IBinder onBind(Intent intent) {
Log.d("Feed", "FeedService.onBind");
return null;
}
@Override
public void onDestroy() {
// I want to restart this service again in 5 seconds
AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
alarm.set(
alarm.RTC_WAKEUP,
System.currentTimeMillis() + (5000),
PendingIntent.getService(this, 0, new Intent(this, FeedService.class), 0)
);
}
}
在我的MainActivity我與啓動服務:
AlarmManager alarm = (AlarmManager)getSystemService(ALARM_SERVICE);
alarm.set(
alarm.RTC_WAKEUP,
System.currentTimeMillis() + (5000),
PendingIntent.getService(this, 0, new Intent(this, FeedService.class), 0)
);
這是我的應用程序的關鍵保留此業務正常運行,我不明白爲什麼它沒有發生。 有人可以解釋我怎麼解決這個問題?
不,它不會被自動檢查 –