先擤两把鼻涕,我的内心在哭泣。。。。。。(目前还在处于探索状态(百度ing…))
**运行手机:**华为nova 3i ,好像是安卓9.0
回合一:
PowerManager.WakeLock m_wklk;
在onCreate()中
m_wklk = null;
PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
m_wklk = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK, TestService.class.getName());
if (null != m_wklk){
m_wklk.acquire();
}
在onDestroy中
if (m_wklk != null) {
m_wklk.release();
m_wklk = null;
}
AndroidManifest中
测试结果:点击home,运行一小会会,我看到了亲切的 onDestory >_<、
回合二:
在onCreate()中
AlarmManager manager;= (AlarmManager) getSystemService(ALARM_SERVICE);
int aMiniute = 2*60*1000; // 这是一分钟的毫秒数
long triggerAtTime = SystemClock.elapsedRealtime() + aMiniute;
Intent i = new Intent(this, AlarmReceiver.class);
PendingIntent pi = PendingIntent.getBroadcast(this, 0, i, 0);
manager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, triggerAtTime, pi);
在onDestroy中
manager.cancel(pi);
AlarmReceiver :
public class AlarmReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
Log.d("Test", "c重启服务onStart TestService .......... ");
Intent i = new Intent(context, TestService.class);
context.startService(i);
} }
记得注册AlarmReceiver 和 Service
参考:Android 开发 AlarmManager 定时器
https://blog.csdn.net/qq_37217804/article/details/82665097
Intent立即响应; pendingintent 类似发送短信,邮件等
*PendingIntent的第四个参数的说明:
PendingIntent 的使用 以及其中参数的理解
https://blog.csdn.net/qq_38340601/article/details/82930108
隔一段时间AlarmReceiver 可以startService(),但是一段时间(几分钟后)还是onDestory 了。。。。。。。。。。。
我不晓得啥子,方方的。。。。。。。
哪位大神路过,求指教,跪谢。。。。。
经过一下午的摸索,终于找到了解决办法。
参考这位大佬的文章 已经毕业的C先生
定时AlarmManager循环执行后台任务和多个定时循环后台任务写在一起
依旧是用AlarmManager,原因猜测应该是安卓版本导致的 问题。目前实现的程度应该是,点击home键,程序中的service可以在后台运行,点击一键清理应该就结束了。
版本判断如下:(具体参考上面的链接)
int apiLevel = getApiLevel();
if (apiLevel < Build.VERSION_CODES.KITKAT) {
Log.d("api<19", "setExactAlarmCompat ");
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), INTERVAL_TIME, pIntent);
} else if (Build.VERSION.SDK_INT < Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT) {
alarmManager.setExact(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), pIntent);
}
Log.d("19= Build.VERSION_CODES.M) {
alarmManager.setExactAndAllowWhileIdle(AlarmManager.RTC_WAKEUP, mCalendar.getTimeInMillis(), pIntent);
Log.d("api>23", "setExactAlarmCompat ");
}
————————————————
版权声明:本文为CSDN博主「已经毕业的C先生」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/cqx13763055264/article/details/79146187