强制结束进程后定时失效 自己写个闹钟,用AlarmManager发送个广播和注册个广播监听。但发现用进程管理器强制结束当前应用进程之后,用代码注册的广播接收器就全部失效了,到时间后根本没反应。相比之下为什么系统自带的闹钟就不会失效呢?请问这个情况应该怎么解决呢?谢谢... 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 代码注册的,你进程都给杀掉了,怎么可能还能接受intent的呢,你可以在manifest中注册全局的receiver,就没问题了。 我可能没有说清楚,我就是在manifest中注册的广播。但是用进程管理器强制结束当前应用进程之后,广播接收器还是全部失效了,到时间后根本没反应。 你AlarmManager注册的循环的event是在哪里注册的?是不是在程序中,程序退出后,你stop了 循环注册的event是指这句代码吧:alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);程序退出后我没有做什么操作,现在的问题是,第三方的任务管理器,比如360,taskkiller可以一键清除所有进程,当我的应用进程被它结束后,定时就失效了。 应该用setRepeating,这个吧,这个是重复的发消息过来。alarmManager.set,只发一次,而且你取得时间貌似还是当前时间,这个应该会立刻执行pendingintent.但是后面就不会在发消息出来了 不是的 你还没理解alarmmanager 你的意思是set,也会不停的发消息出来? 这个set只发一次,就是在你设定的时间上发一次,repeat可以一定的时间间隔不停的发。我们平时用的就是repeating的。alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);如果你的代码是这句的话,那么他会立刻执行。你设置一个repeating的看看,然后杀掉进程。在repeating的时间间隔到来后,肯定你杀掉的process又起来了,因为你注册了全局的receiver,会把process给启动起来的。很简单就可以测试一下。 http://www.cnblogs.com/jico/archive/2010/11/03/1868361.html 经过测试,你说的这个方法不可行。用taskkiller杀掉的进程,结果定时广播一样失效。现在的问题是虽然我注册了全局的receiver,但是定时广播是用户操作的时候设定的,应用进程被杀之后难道这个pendingIntent对象被系统回收了?所以导致定时失效? 我用api demo中的repeating测试了一下,怎么是好的,我启动后,把process给kill掉,怎么没问题? 估计还是你写的有问题,你看一下apidemo中的,app->alarm->alarm controller这个。然后你启动repeating后,直接kill所有的apis的process. 因为你用的2.3或以上的系统。2.3以上会自己重启process,无论是repeating还是不是。2.3以下才会有这种问题,我忘了说了。PS:app->alarm->alarm controller是在SDK下吗 我怎么没找到呢 我这边是4.0.用eclipse把apidemo import进去。AlarmController.java。在sdk的samples里面搜索。 你可以找到apidemo测试看看,不行的话,就看看系统自带的闹钟怎么搞的。 系统自带的闹钟属于system级别的,它是放在system/app下的,我们的应用都在data/app下。system/app下的应用可以设置永不被kill. 用service怎么样?或者,应用被kill掉的时候,能不能在应用里用if判断是否pid被杀掉?如果能的话可以在if语句里进行操作。 那要是service所在的process给杀掉了,service也没用。另外:4.0上貌似任何的process都能给杀掉,包括system process. 也就是说android:process=":remote",代表在应用程序里,当需要该service时,会自动创建新的进程。而如果是android:process="remote",没有“:”分号的,则创建全局进程,不同的应用程序共享该进程。 不知道注册 time tick 这个event,process个杀掉后,会不会给系统启动起来。我的理解是只要apk还在就能启动起来。不知道低版本的什么效果 time pick是什么?广播吗? 很简单吗,直接写个程序,然后用battarytracer测试一下就是到了,我写的app中,我们测试的时候,没发现这个耗电 楼主你解决了? 我用了哪个系统每分钟发广播的也不行啊,只要在设置中强制关闭就不行,是不是android系统版本的问题, opencv的使用问题 问个基础问题关于ONCREAT 怎么在android软件中插入广告的设置 请问如何实现AttributeSet接口? sqlite数据库的查询,急 android https DNS解析问题 本地的开发环境 貌似访问不了外网。。。。。。。 我只想说三个字,去你的 win8.1 64bit+eclipse-standard 3.4.2安装ADT问题 scrollview嵌套webview,导致scrollview不能滑动,怎么解决 android4.0.4 3G网络不能看视频,wifi可以看视频。 android 开发塔防游戏 用什么引擎好
alarmManager.set,只发一次,而且你取得时间貌似还是当前时间,这个应该会立刻执行pendingintent.但是后面就不会在发消息出来了
我们平时用的就是repeating的。
alarmManager.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), pendingIntent);
如果你的代码是这句的话,那么他会立刻执行。你设置一个repeating的看看,然后杀掉进程。在repeating的时间间隔到来后,肯定你杀掉的process又起来了,因为你注册了全局的receiver,会把process给启动起来的。很简单就可以测试一下。
然后你启动repeating后,直接kill所有的apis的process.
因为你用的2.3或以上的系统。2.3以上会自己重启process,无论是repeating还是不是。2.3以下才会有这种问题,我忘了说了。
PS:app->alarm->alarm controller是在SDK下吗 我怎么没找到呢
用eclipse把apidemo import进去。AlarmController.java。在sdk的samples里面搜索。
或者,应用被kill掉的时候,能不能在应用里用if判断是否pid被杀掉?如果能的话可以在if语句里进行操作。
我的理解是只要apk还在就能启动起来。不知道低版本的什么效果