清除缓存将停止android服务/挂起意图
我使用的是意图服务。每当我清除缓存时(通过单击“最近的任务”按钮,然后单击“清除缓存”图标),我的服务将关闭(如果已启动),即使我使用alarm manager设置的挂起意图也不会启动服务(如果计划稍后启动) 这是我的基本代码:清除缓存将停止android服务/挂起意图,android,android-service,Android,Android Service,我使用的是意图服务。每当我清除缓存时(通过单击“最近的任务”按钮,然后单击“清除缓存”图标),我的服务将关闭(如果已启动),即使我使用alarm manager设置的挂起意图也不会启动服务(如果计划稍后启动) 这是我的基本代码: public class MainActivity extends Activity { SampleAlarmReceiver alarm = new SampleAlarmReceiver(); @Override protected vo
public class MainActivity extends Activity {
SampleAlarmReceiver alarm = new SampleAlarmReceiver();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
alarm.setAlarm(this);
}
}
public class SampleAlarmReceiver extends WakefulBroadcastReceiver {
private AlarmManager alarmMgr;
private PendingIntent alarmIntent;
@Override
public void onReceive(Context context, Intent intent) {
Intent service = new Intent(context, SampleSchedulingService.class);
startWakefulService(context, service);
}
public void setAlarm(Context context) {
alarmMgr = (AlarmManager)context.getSystemService(Context.ALARM_SERVICE);
Intent intent = new Intent(context, SampleAlarmReceiver.class);
alarmIntent = PendingIntent.getBroadcast(context, 0, intent, 0);
Calendar calendar = Calendar.getInstance();
calendar.setTimeInMillis(System.currentTimeMillis());
calendar.set(Calendar.HOUR_OF_DAY, 8);
calendar.set(Calendar.MINUTE, 30);
alarmMgr.setInexactRepeating(AlarmManager.RTC_WAKEUP,
calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, alarmIntent);
ComponentName receiver = new ComponentName(context, SampleBootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_ENABLED,
PackageManager.DONT_KILL_APP);
}
public void cancelAlarm(Context context) {
if (alarmMgr!= null) {
alarmMgr.cancel(alarmIntent);
}
ComponentName receiver = new ComponentName(context, SampleBootReceiver.class);
PackageManager pm = context.getPackageManager();
pm.setComponentEnabledSetting(receiver,
PackageManager.COMPONENT_ENABLED_STATE_DISABLED,
PackageManager.DONT_KILL_APP);
}
}
public class SampleBootReceiver extends BroadcastReceiver {
SampleAlarmReceiver alarm = new SampleAlarmReceiver();
@Override
public void onReceive(Context context, Intent intent) {
if (intent.getAction().equals("android.intent.action.BOOT_COMPLETED"))
{
alarm.setAlarm(context);
}
}
}
public class SampleSchedulingService extends IntentService {
public SampleSchedulingService() {
super("SchedulingService");
}
public static final String TAG = "Scheduling Demo";
public static final int NOTIFICATION_ID = 1;
private NotificationManager mNotificationManager;
NotificationCompat.Builder builder;
@Override
protected void onHandleIntent(Intent intent) {
//my work
SampleAlarmReceiver.completeWakefulIntent(intent);
}
}
大部分内容取自以下示例代码:
清除缓存后,如何保持服务运行或重新启动。此外,如何确保pending intent即使在清除缓存后也会启动服务
谢谢
感谢帮助:)这是在清除Android应用程序的缓存或数据时的预期行为。
当应用程序数据被清除时,Android操作系统将关闭应用程序(如果正在运行),并清除与应用程序关联的所有服务和广播接收器。甚至警报管理器也被清除
为什么会发生这种情况?您可以看到,服务和接收器利用应用程序数据执行多个操作。因此,如果您的服务在清除数据时没有关闭,它可能会在运行时引发一些异常,因为它所操作的数据已经不存在了
目前还没有解决方案。你可以做的是在应用程序启动时重新启动服务和接收器
如果您正在清除应用缓存或数据,请在评论中提及?有关更多信息,请参阅此页。您能在这里查看我的问题吗>>>@Mr.Popular您找到解决方案了吗。我也在尝试同样的事情,但在我尝试之前,它似乎不起作用。。我已将我的问题与50名代表bounty联系在一起,但仍然没有答案。。如果你发现什么就告诉我。。这对我将是一个很大的帮助。。。