Android系统休眠和定时唤醒讨论

Puss-in-Boots 2010-06-18 10:40:18
小弟刚接触Android,手里有个真机,发现Android和WM的一样由一个休眠的机制,在用户无操作的状态下会进入休眠状态,该状态下几乎所有的进程都被挂起,任何当前使用的程序都会失效,计入休眠状态。可能跟WM的还有点区别,至少我目前观察很类似。现在的问题是:
如果我开发一个需要长期在后台运行的程序,该如何解决休眠问题呢?
比如监测电量,或者收集GPs数据,这种需求在WM上有一个第三方开发的定时器可以解决,这个定时器会想系统发送硬件中断,从而达到唤醒系统的目的。
因此,我想请教一下各位,Android的上面如何用可用的Java API,用程序去定时唤醒系统呢?可行不可行呢?类似于WM的那样。
小弟新手,抛砖引玉,请各位,各抒己见,百家争鸣。
...全文
22886 45 打赏 收藏 转发到动态 举报
写回复
用AI写文章
45 条回复
切换为时间正序
请发表友善的回复…
发表回复
惜海 2013-01-10
  • 打赏
  • 举报
回复
好东西,学习了
AutumnSea03 2013-01-10
  • 打赏
  • 举报
回复
休眠有early suspend和suspend,early suspend是可以通过alarm来唤醒的,但是suspend没法通过alarm来唤醒,进入suspend之后系统自带的闹钟程序都不会起作用了,我刚发了帖子在寻求解决办法呢http://bbs.csdn.net/topics/390336575
零竹心 2012-10-27
  • 打赏
  • 举报
回复
厉害...人才
ssyliusha 2012-07-11
  • 打赏
  • 举报
回复
[Quote=引用 41 楼 的回复:]

AlarmManager,定时唤醒啊,就是保证你的程序在休眠状态下,还能保持运行,比如,你30分钟收集一次gps数据,你就28分钟唤醒一次。
[/Quote]

- # 表述失误,, gps不会受影响..... 如果是获得基站信息就会受影响...获得基站信息是与cpu休眠与唤醒关系不大,,, 但是机器黑屏 你后台拿到的基站信息 永远是开屏前那一刻的..
tony21st2 2012-07-11
  • 打赏
  • 举报
回复
AlarmManager,定时唤醒啊,就是保证你的程序在休眠状态下,还能保持运行,比如,你30分钟收集一次gps数据,你就28分钟唤醒一次。
ssyliusha 2012-07-09
  • 打赏
  • 举报
回复
广播,wake_lock等等等 都能解决让唤醒沉睡的cpu,某些机器可能出现唤醒延迟....但是对于某些android机器对唤醒gps来说这是无效的...
heweiliangjie 2012-06-29
  • 打赏
  • 举报
回复
[Quote=引用 38 楼 的回复:]

timer会在系统进入休眠时变慢,之前做过一个应用,timer在休眠状态下1秒钟要延迟一分钟左右
[/Quote]

那你咋解决这种延迟的?
fhhdg 2012-02-27
  • 打赏
  • 举报
回复
timer会在系统进入休眠时变慢,之前做过一个应用,timer在休眠状态下1秒钟要延迟一分钟左右
wangzy_88 2012-02-24
  • 打赏
  • 举报
回复
[Quote=引用 36 楼 swingboy 的回复:]

反编译手机qq,微信,米聊,你会发现他们都是用的wake_lock,这表示什么,你懂得
[/Quote]

请问楼上看QQ的源码,他是一直拿着wake_lock锁吗?还是周期性的?
swingboy 2012-02-21
  • 打赏
  • 举报
回复
反编译手机qq,微信,米聊,你会发现他们都是用的wake_lock,这表示什么,你懂得
oyq_yangy 2011-12-20
  • 打赏
  • 举报
回复
我觉得用以下东西就可以:
IntentService, AlarmManager, PendingIntent.加一个BroardcastReciever

IntentService会自己开一个线程,AlarmManager加PendingIntent可以实现没两小时发个广播,然后Reciever启动这个Service,Service干完活后stop掉。
fire_fire_fire 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 yyhzpk 的回复:]

如果长时间要运行,就不能wake_lock,这样会很快把设备电耗光的
如果实在要周期性运行统计结果,那只能设置一个alarm,周期性唤醒
做完事情后又让设备sleep,
最好不要这样搞,这样的程序,大家都不喜欢,很耗电,我如果发现我手机
上有类似的软件,马上会卸掉
[/Quote]
可以给个例子吗?我想知道怎样才可以做到你说的周期性唤醒,谢了,邮箱:lijingjin77@sina.com
zy1235678 2011-12-20
  • 打赏
  • 举报
回复
Alarm 是不错.
jjyyhema 2011-12-20
  • 打赏
  • 举报
回复
[Quote=引用 32 楼 oyq_yangy 的回复:]

我觉得用以下东西就可以:
IntentService, AlarmManager, PendingIntent.加一个BroardcastReciever

IntentService会自己开一个线程,AlarmManager加PendingIntent可以实现没两小时发个广播,然后Reciever启动这个Service,Service干完活后stop掉。
[/Quote]
靠谱

放在服务中执行
AlarmManager alarmManager = (AlarmManager)getSystemService(Context.ALARM_SERVICE);
PendingIntent pi = createAlarmIntent();//启动自身服务的Intent
long nextTime = SystemClock.elapsedRealtime() + NEXT_DELAY;
alarmManager.set(AlarmManager.ELAPSED_REALTIME_WAKEUP, nextTime, pi);
Fiven_Luo 2011-12-20
  • 打赏
  • 举报
回复
后台运行用Service,唤醒系统看一下闹钟怎么做的就可以了。
如果需要开机自动运行,就注册BOOT_COMPLETED服务。
安卓android 2011-12-19
  • 打赏
  • 举报
回复
问题:service会不会在休眠状态下运行?
lbmygf 2011-12-19
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xx2005112234 的回复:]

谢谢楼上指点。
但是我想知道如何从程序操控电源管理,或者发送中断信号激活系统
硬件上是怎么一回事,目前没有太多时间去探究
我只是想如何用代码实现程序长期后台运行,定期激活休眠的系统做某一件事,例如像服务器发送数据,收集GPS数据等等
这样可以达到两个效果:1.程序可用,避开了系统休眠的问题,或者说解决了
2.总体省电,而不是一直让系统保持运行……
[/Quote]


你可以用中断或clock去做了,在申请中断时好像有个参数可以把它注册为可唤醒系统中断,闹钟也是可以唤醒系统的。
yyhzpk 2011-12-19
  • 打赏
  • 举报
回复
如果长时间要运行,就不能wake_lock,这样会很快把设备电耗光的
如果实在要周期性运行统计结果,那只能设置一个alarm,周期性唤醒
做完事情后又让设备sleep,
最好不要这样搞,这样的程序,大家都不喜欢,很耗电,我如果发现我手机
上有类似的软件,马上会卸掉
fire_fire_fire 2011-12-19
  • 打赏
  • 举报
回复
1.添加权限
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.DEVICE_POWER" />
2.建一个Service,在里面写:
WakeLock mWakeLock;// 电源锁
/**
* 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, "myService");
if (null != mWakeLock) {
mWakeLock.acquire();
}
}
}

/**
* onDestroy时,释放设备电源锁
*/
private void releaseWakeLock() {
if (null != mWakeLock) {
mWakeLock.release();
mWakeLock = null;
}
}
这样就可以保证你的Service在锁屏时不被干掉。但是这样又有一个问题,就是耗电特别快,我想借问下高手有人知道要怎样解决耗电的问题吗?
program035 2011-12-19
  • 打赏
  • 举报
回复
楼主,通过添加权限的方式可以吗
在Manifest.xml文件里面用user-permission声明android.permission.WAKE_LOCK
加载更多回复(24)

80,349

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧