休眠和唤醒

原创 2015年11月20日 15:10:12
  1. 系统APP;
  2. 关键点:
    #echo mem >/sys/power/state 使系统进入睡眠
    #echo on > /sys/power/state 使系统从睡眠中唤醒过来

代码:

File file = new File("/sys/power/state");
    try {
     OutputStream os = new FileOutputStream(file);
            os.write("mem\n".getBytes());
            os.close();
            file = null;
        }
        catch(IOException e)
        {
            Log.d(TAG, "Error writing " + file, e);
}

休眠方式二(android4.0以后提供了goToSleep的接口):

import android.os.PowerManager;

PowerManager pm = (PowerManager)activity.getSystemService(Context.POWER_SERVICE);
pm.goToSleep(pm.goToSleep(SystemClock.uptimeMillis()););
//pm.goToSleep(0);使用0参数只会休眠一次,第二次休眠无效
//需要关机重启后才可以再次生效。

唤醒:使用闹钟唤醒,AlarmManager 是 Android 系统封装的用于管理 RTC 的模块,RTC (Real Time Clock) 是一个独立的硬件时钟,可以在 CPU 休眠时正常运行,在预设的时间到达时,通过中断唤醒 CPU。
休眠5分钟后唤醒:

import android.app.PendingIntent;
import android.app.AlarmManager;

Display.appendInfo("休眠时间测试 \n");
Display.appendInfo("系统即将休眠..\n");

Intent intent = new Intent(activity, AlarmReceiver.class);
PendingIntent sender = PendingIntent.getBroadcast(
              activity, 0, intent, 0);

// We want the alarm to go off 30 seconds from now.
Calendar calendar = Calendar.getInstance();     calendar.setTimeInMillis(System.currentTimeMillis());
calendar.add(Calendar.SECOND, 30);

AlarmManager am = (AlarmManager) activity.getSystemService(Context.ALARM_SERVICE);
am.set(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), sender);                       

Log.i(TAG,"goToSleep..\n");
goToSleep();
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import android.os.PowerManager;
import android.os.PowerManager.WakeLock;

//闹钟广播
public class AlarmReceiver extends BroadcastReceiver{

 @Override
 public void onReceive(Context context, Intent intent) 
 {
     Log.e("AlarmReceiver", "onReceive");
    //唤醒屏幕
    //获取电源管理器对象
    PowerManager pm =(PowerManager)context.getSystemService(Context.POWER_SERVICE);
    //获取PowerManager.WakeLock对象,后面的参数|表示同时传入两个值,最后的是调试用的Tag
    WakeLock wl = pm.newWakeLock(PowerManager.ACQUIRE_CAUSES_WAKEUP | PowerManager.SCREEN_BRIGHT_WAKE_LOCK, "bright");
     //点亮屏幕
     wl.acquire();
    } 
}

AndroidManifest.xml中声明闹钟广播:

<receiver android:name="com.pax.apifunctest.AlarmReceiver" android:process=":remote"/>

下面转自:http://www.xiaoyunduo.org/article/109/

调用 AlarmManager 需要注意的参数
AlarmManager.RTC:硬件闹钟,不唤醒手机(也可能是其它设备)休眠;当手机休眠时不发射闹钟。
AlarmManager.RTC_WAKEUP:硬件闹钟,当闹钟发躰时唤醒手机休眠;
AlarmManager.ELAPSED_REALTIME:真实时间流逝闹钟,不唤醒手机休眠;当手机休眠时不发射闹钟。
AlarmManager.ELAPSED_REALTIME_WAKEUP:真实时间流逝闹钟,当闹钟发躰时唤醒手机休眠;
AlarmManager.POWER_OFF_WAKEUP:能唤醒系统,他是一种关机闹铃,就是说设备在关机状态下也可以唤醒系统,所以我们把它称为关机闹铃。

RTC和ELAPSED最大的差别
前者可以通过修改手机时间触发闹钟事件,后者要通过真实时间的流逝,即使在休眠状态,时间也会被计算。所以上面的代码使用 ELAPSED_REALTIME_WAKEUP
在使用 ELAPSED 时使用 SystemClock.elapsedRealtime() 获取时间
在使用 ETC 时使用 System.currentTimeMillis() 获取时间

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

Linux休眠唤醒(三)

五、suspend和resume代码走读     下面对suspend分的几个阶段都是按照pm test的5中模式来划分的:freezer、devices、platform、processors、...

android休眠与唤醒

  • 2012-04-26 08:57
  • 2.26MB
  • 下载

Android在标准linux基础上对休眠唤醒的实现(二)

转载:http://blog.csdn.net/lizhiguo0532/article/details/6453587 三、kernel层源码解析 - wakelock的重要地位 wakel...

linux_休眠唤醒

  • 2011-09-21 14:25
  • 56KB
  • 下载

Linux Kernel and Android 休眠与唤醒

简介国际化版本信息对于休眠(suspend)的简单介绍Linux Suspend 的流程相关的文件:准备, 冻结进程让外设进入休眠ResumeAndroid 休眠(suspend)涉及到的文件:特性介...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)