安卓CPU休眠Timer不执行
来源:互联网 发布:淘宝设计 编辑:程序博客网 时间:2024/06/05 17:20
在开发中,有时我们需要在后台循环执行一些操作(比如:即时通讯心跳包的发送)。
xml布局文件:
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <Button android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center" android:onClick="start" android:text="开始" /></RelativeLayout>
Activity代码:
import android.app.Activity;import android.os.Environment;import android.os.Bundle;import android.view.View;import java.io.BufferedWriter;import java.io.File;import java.io.FileWriter;import java.io.IOException;import java.util.Date;import java.util.Timer;import java.util.TimerTask;/** * 注:确保应用不被杀掉;拔掉充电(或者关闭充电时保持唤醒),锁屏,让CPU进入休眠。 */public class MainActivity extends Activity { private static final String TAG = MainActivity.class.getSimpleName(); private String path; private static final String NAME_SUFFIX = ".txt"; private boolean enable; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); init(); } private void init() { if (Environment.getExternalStorageState().equals(android.os.Environment.MEDIA_MOUNTED)) { path = Environment.getExternalStorageDirectory().getAbsolutePath(); File file = new File(path); if (!file.exists()) { file.mkdirs(); } enable = true; return; } } public void start(View view) { Timer timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { if (enable) { try { FileWriter filerWriter = new FileWriter(new File(path, "CPUSleep" + NAME_SUFFIX), true); BufferedWriter bufWriter = new BufferedWriter(filerWriter); bufWriter.write(new Date().toString()); bufWriter.write("\r\n"); bufWriter.close(); filerWriter.close(); } catch (IOException e) { e.printStackTrace(); } } } }, 0, 1000 * 30); }}操作说明:
点击开始按钮-》锁屏-》等一段时间-》解锁屏幕结果:
结果说明:
1:点击开始按钮,Timer执行,写入了16:08:15;2:图中可以看到16:08:15-16:12:04之间没有数据,没有执行写入操作代码(代码中可以看到每30秒写入一次);3:当解锁屏幕CPU被唤醒后,Timer继续执行写入了16:12:04;解决方案:
1:获取电源锁,让CPU不休眠;(耗电严重,不推荐)2:用AlarmManager代替Timer。说明:Android手机有两个处理器,一个叫Application Processor(AP),一个叫Baseband Processor(BP)。AP是ARM架构的处理器,用于运行Linux+Android系统;BP用于运行实时操作系统(RTOS)。AlarmManager 是 Android 系统封装的用于管理 RTC 的模块,RTC (Real Time Clock) 是一个独立的硬件时钟,可以在 CPU 休眠时正常运行,在预设的时间到达时,通过中断唤醒 CPU。AlarmManager使用代码:Intent intent = new Intent();
intent.setAction("");
PendingIntent sender = PendingIntent.getBroadcast(this, 0, intent, 0);
AlarmManager alarm = (AlarmManager) getSystemService(ALARM_SERVICE);
alarm.setRepeating(AlarmManager.ELAPSED_REALTIME_WAKEUP, SystemClock.elapsedRealtime(), 1000 * 10, sender);清单文件注册:<receiver android:name="">
<intent-filter>
<action android:name="" />
</intent-filter>
</receiver>注:
确保应用不被杀掉;拔掉充电(或者关闭充电时保持唤醒),锁屏,让CPU进入休眠。
1 0
- 安卓CPU休眠Timer不执行
- Cocos2d-x 安卓设定不休眠(屏幕常亮)
- android 唤醒设备 cpu后台不休眠
- 防止安卓手机进入休眠状态 cpu停止 导致应用死掉
- 手机休眠被唤醒后timer还继续执行吗
- 安卓 开机按power不能休眠,过一段时间才能休眠
- 安卓timer.cancel();问题!!
- 安卓屏幕唤醒与休眠
- 安卓4.4,去锁屏+禁止休眠
- Timer的缺陷-不按定时时间执行【已入坑】
- SDK安卓模拟器CPU/ABI为灰色不显示的解决
- java 安卓 timer的使用方法
- 安卓定时任务Timer一直失败
- 安卓M版本如何在setting中的休眠模式下添加永不休眠功能?
- 安卓延迟执行
- TMS320F28335 CPU Timer
- 安卓 休眠 长连接和推送的可选实现
- Android 不休眠 不锁屏
- 微博分享遇到的坑
- 非常经典的JAVA编程题(正整数分解质因数)
- Android 漂亮的日期选择控件Time-Selector
- RDD中partion和block的对比
- 图书管理系统设计
- 安卓CPU休眠Timer不执行
- SFTP client实例
- Android推送(长连接)探索
- C语言复杂表达式和指针高级应用
- 浅谈多人协作
- FREESWIITCH常见配置问题一
- HDU 2438 Turn the corner【三分】
- DRBD安装配置、工作原理及故障恢复
- IOS ShareSDK实现分享——微信分享