自己写个闹钟,用AlarmManager发送个广播和注册个广播监听。但发现用进程管理器强制结束当前应用进程之后,用代码注册的广播接收器就全部失效了,到时间后根本没反应。
相比之下为什么系统自带的闹钟就不会失效呢?
请问这个情况应该怎么解决呢?
谢谢...

解决方案 »

  1.   

    代码注册的,你进程都给杀掉了,怎么可能还能接受intent的呢,你可以在manifest中注册全局的receiver,就没问题了。
      

  2.   

    我可能没有说清楚,我就是在manifest中注册的广播。但是用进程管理器强制结束当前应用进程之后,广播接收器还是全部失效了,到时间后根本没反应。
      

  3.   

    你AlarmManager注册的循环的event是在哪里注册的?是不是在程序中,程序退出后,你stop了
      

  4.   

    循环注册的event是指这句代码吧:alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);程序退出后我没有做什么操作,现在的问题是,第三方的任务管理器,比如360,taskkiller可以一键清除所有进程,当我的应用进程被它结束后,定时就失效了。
      

  5.   

    应该用setRepeating,这个吧,这个是重复的发消息过来。
    alarmManager.set,只发一次,而且你取得时间貌似还是当前时间,这个应该会立刻执行pendingintent.但是后面就不会在发消息出来了
      

  6.   

    不是的  你还没理解alarmmanager
      

  7.   

    你的意思是set,也会不停的发消息出来?
      

  8.   

    这个set只发一次,就是在你设定的时间上发一次,repeat可以一定的时间间隔不停的发。
    我们平时用的就是repeating的。
    alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
    如果你的代码是这句的话,那么他会立刻执行。你设置一个repeating的看看,然后杀掉进程。在repeating的时间间隔到来后,肯定你杀掉的process又起来了,因为你注册了全局的receiver,会把process给启动起来的。很简单就可以测试一下。
      

  9.   

    http://www.cnblogs.com/jico/archive/2010/11/03/1868361.html
      

  10.   

    经过测试,你说的这个方法不可行。用taskkiller杀掉的进程,结果定时广播一样失效。现在的问题是虽然我注册了全局的receiver,但是定时广播是用户操作的时候设定的,应用进程被杀之后难道这个pendingIntent对象被系统回收了?所以导致定时失效?
      

  11.   

    我用api demo中的repeating测试了一下,怎么是好的,我启动后,把process给kill掉,怎么没问题?
      

  12.   

    估计还是你写的有问题,你看一下apidemo中的,app->alarm->alarm controller这个。
    然后你启动repeating后,直接kill所有的apis的process.
      

  13.   


    因为你用的2.3或以上的系统。2.3以上会自己重启process,无论是repeating还是不是。2.3以下才会有这种问题,我忘了说了。
    PS:app->alarm->alarm controller是在SDK下吗 我怎么没找到呢
      

  14.   

    我这边是4.0.
    用eclipse把apidemo import进去。AlarmController.java。在sdk的samples里面搜索。
      

  15.   

    你可以找到apidemo测试看看,不行的话,就看看系统自带的闹钟怎么搞的。
      

  16.   

    系统自带的闹钟属于system级别的,它是放在system/app下的,我们的应用都在data/app下。system/app下的应用可以设置永不被kill.
      

  17.   

    用service怎么样?
    或者,应用被kill掉的时候,能不能在应用里用if判断是否pid被杀掉?如果能的话可以在if语句里进行操作。
      

  18.   

    那要是service所在的process给杀掉了,service也没用。另外:4.0上貌似任何的process都能给杀掉,包括system process.
      

  19.   

    也就是说android:process=":remote",代表在应用程序里,当需要该service时,会自动创建新的进程。而如果是android:process="remote",没有“:”分号的,则创建全局进程,不同的应用程序共享该进程。
      

  20.   

    不知道注册 time tick 这个event,process个杀掉后,会不会给系统启动起来。
    我的理解是只要apk还在就能启动起来。不知道低版本的什么效果
      

  21.   

    time pick是什么?广播吗?
      

  22.   

    很简单吗,直接写个程序,然后用battarytracer测试一下就是到了,我写的app中,我们测试的时候,没发现这个耗电
      

  23.   

    楼主你解决了?  我用了哪个系统每分钟发广播的也不行啊,只要在设置中强制关闭就不行,是不是android系统版本的问题,