我在实现定期运行的服务时遇到了一些困难。 当屏幕开启时,应用程序可以正常工作,即使应用程序已从最近的任务中删除。但是当设备被锁定时,应用会停止,即使屏幕再次打开,服务也不会返回。 我已经实现了一个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)
);
这是我的应用程序的关键保留此业务正常运行,我不明白为什么它没有发生。 有人可以解释我怎么解决这个问题?
不,它不会被自动检查 –