首页 > android AlarmManager在程序退出后,也就收不到广播了!那么第三方的闹钟程序如何实现定时提醒功能???

android AlarmManager在程序退出后,也就收不到广播了!那么第三方的闹钟程序如何实现定时提醒功能???

//one time

private void startAlarm1(){
    alarmMgr =     (AlarmManager)this.getSystemService(Context.ALARM_SERVICE);
    Intent intent = new Intent(this, AlarmReceiver.class);
    alarmIntent = PendingIntent.getBroadcast(this, 0, intent, 0);

    alarmMgr.set(AlarmManager.ELAPSED_REALTIME_WAKEUP,
            SystemClock.elapsedRealtime() +
                    60 * 1000, alarmIntent);
}

上面是我做的第一种方案 关闭屏幕进入休眠状态,程序退出后广播就收不到了。
1.接着就开启Service,想通过后台去自己实现定时提醒的效果。
可是Service 在程序休眠过后,几分钟就退出了。
2.加入唤醒锁,在service onCreate方法中 依然没有效果。

private void acquireWakeLock() {
    if (null == mWakeLock) {
        PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE);
        mWakeLock = pm.newWakeLock(PowerManager.PARTIAL_WAKE_LOCK
                | PowerManager.ON_AFTER_RELEASE, Service5.class.getName());
        if (null != mWakeLock) {
            mWakeLock.acquire();
        }
    }
}

3.后台开启两个service 一个在主进程中,一个自己再开一个单独进程中的Service。两个进程互相轮询,谁死掉就开启谁。

<service android:name=".Service5" android:process=":service5"></service>        
 <service android:name=".Service3" android:process="gac.service3"></service>

其中Service3中的线程代码,Service5中的代码雷同

private void initThread(){

        new Thread(new Runnable() {
            @Override
            public void run() {

                while (true){

                    if(!getCurProcessName(getApplicationContext())){
                        Log.e("gac","重新启动service5");
                        startService(new Intent(Service3.this, Service5.class));
                    }
                    try {
                        Thread.sleep(1000*60*30);
                    } catch (InterruptedException e) {
                        e.printStackTrace();
                    }
                    Log.e("gac","service3 is running");
                }

            }
        }).start();
    }

可是根本检测不到Service重启的情况,后台两个进程的Service同时关闭了。
如果现在做第三方的闹钟应用就没有办法了吗???
我看了一下正点闹钟,后台开启两个进程,里面的service有推送服务,
有闹钟提醒。它的后台进程,休眠时候却没有关掉。
所以我推测它也是用的守护进程做的闹钟服务。
利用AlarmManager做闹钟更不不现实。后台应用进程没了,广播接收器也就收不到广播了。


你的AlarmReceiver是在代码里动态注册,还是在AndroidManifest.xml静态注册的


项目里面集成了极光推送,极光推送可以保持进程常驻,休眠应用退出了,进程还会开着,闹钟广播提醒就不会失效了。折腾了三四天,最后,还是找一个折中的方法。网上找了很多例子,最后效果都不理想、经不住android 休眠的影响。哎!!!


你用的什么机器,很多国内的手机厂商都会对包名做判断的,有闹钟唤醒白名单的。

【热门文章】
【热门文章】