A. android怎样通过广播机制唤醒后台服务
[mw_shl_code=java,false] <receiver
android:name="com.test.DataChangeReceiver" >
<intent-filter>
<action
android:name="android.intent.action.DATE_CHANGED" />
</intent-filter>
</receiver>[/mw_shl_code]
这个是一个接收日期改变后的广播的例子;
对应的 java文件
就一个receive
[mw_shl_code=java,true]public class DataChangeReceiver extends
BaseReceiver {
@Override
public void onReceive(Context
context, Intent intent) {}
}[/mw_shl_code]
B. “Android操作系统”一直唤醒,该怎么解决
1、在更换SD卡 得到解决 2、只要用USB存储模式连接电脑 就会引起耗电 只有重启才能解决 3、因为替换了系统的状态栏 引起耗电 替换回原版 得到解决 4、因为谷歌服务框架引起 替换别的版本谷歌服务框架 得到解决 5、 因为装了某个软件引起 卸载后 得到解决 6、 刷ROM 得到解决 7、刷机换了内核 得到解决 8.关闭wifi
C. android系统后台唤醒怎么关闭
Android 系统支持应用程序及服务在待机前保存程序运行状态,如待机前关闭文件读写、usb 操作、暂停音乐播放;也支持唤醒后的程序状态恢复,如恢复打开文件进行读写操作,恢复 usb 操作、恢复音乐播放等。这些状态的保存和恢复功能可以保证系统在待机唤醒后能正常工作。
主要提供两种方式:
1、待机广播消息和唤醒广播消息。
2、Wakelock 锁机制。
分为两个部分说明一下:
1、android 系统待机处理机制
待机广播消息和唤醒广播消息
系统在 PowerManagerService 类中注册了 2 个广播分别用于待机前和唤醒后发送。
void initInThread(){
//唤醒后:
mScreenOnIntent=newIntent(Intent.ACTION_SCREEN_ON);//唤醒后发送
mScreenOnIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
//待机前:
mScreenOffIntent=newIntent(Intent.ACTION_SCREEN_OFF);//待机时发送
mScreenOffIntent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
}
这里顺带说明一下广播接收的优先级问题:
接收者按照在 Manifest.xml 文件中设置的接收顺序依次接收Intent,顺序执行的,接收的优先级可以在系统配置文件中设置:
声明在intent-filter元素的android:priority 属性中,数值越大优先级别越高,其取值范围为-1000到1000。当然也可以在调用IntentFilter对象的setPriority()方法进行设置
Wakelock 锁机制:
应用程序可以通过申请 wakelock 锁的机制来对系统是否待机作出投票,当有任何一个应用申请了 wakelock 锁,待机时没有释放掉,系统是不会进入待机的,直到所有应用的 wakelock 锁都释放掉了,才会进入待机。
D. Android唤醒功能是不是要这么久的
我的安卓 是 三星I9103 用系统自带的 锁屏后 唤醒确实有延迟的 不过用软件就好了 不过不会出现你说的 变成待机状态 不行刷机吧 安卓 就这点好处
E. android为什么相互唤醒
源于国内极其糟糕的安卓应用生态环境。各大app运营商郎呗(防止被查水表)为奸,为保证自己的app能无时无刻在后台运行。当然这其中有一点好处,就是用户不会错过app的消息通知,但app恐怕还有其他目的,在当今的大数据时代,每个人的信息都是极为重要的。但在国外这种情况很少,app开发者们很重视用户体验,不会为了一些东西压榨用户手机内存,更重要的是即使他们的app没有运行,用户照样能接受到消息。这源于谷歌提供的gms推送服务。所以国外的安卓应用生态比我们好太多,国内都是各大应用市场各成一家,根本没有像google play商店那样的严格规范。
F. android子线程如何暂停和唤醒
在子线程中加looper,然后在主线程中向子线程中定义的handler发送消息,通知子线程wait()或者notify(),记得run中的代码块要放在synchronized中,说了大致的思路。
G. Android上某应用唤醒另一应用的方式有多少种
进程中线程同步的四种常用方式:
1、 临界区(CCriticalSection)
当多个线程访问一个独占性共享资源时,可以使用临界区对象。拥有临界区的线程可以访问被保护起来的资源或代码段,其他线程若想访问,则被挂起,直到拥有临界区的线程放弃临界区为止。具体应用方式:
1、 定义临界区对象CcriticalSection g_CriticalSection;
2、 在访问共享资源(代码或变量)之前,先获得临界区对象,g_CriticalSection.Lock();
3、 访问共享资源后,则放弃临界区对象,g_CriticalSection.Unlock();
2、 事件(CEvent)
事件机制,则允许一个线程在处理完一个任务后,主动唤醒另外一个线程执行任务。比如在某些网络应用程序中,一个线程如A负责侦听通信端口,另外一个线程B负责更新用户数据,利用事件机制,则线程A可以通知线程B何时更新用户数据。每个Cevent对象可以有两种状态:有信号状态和无信号状态。Cevent类对象有两种类型:人工事件和自动事件。
自动事件对象,在被至少一个线程释放后自动返回到无信号状态;
人工事件对象,获得信号后,释放可利用线程,但直到调用成员函数ReSet()才将其设置为无信号状态。在创建Cevent对象时,默认创建的是自动事件。
1、1234CEvent(BOOL bInitiallyOwn=FALSE, BOOL bManualReset=FALSE, LPCTSTR lpszName=NULL, LPSECURITY_ATTRIBUTES lpsaAttribute=NULL);
bInitiallyOwn:指定事件对象初始化状态,TRUE为有信号,FALSE为无信号;
bManualReset:指定要创建的事件是属于人工事件还是自动事件。TRUE为人工事件,FALSE为自动事件;
后两个参数一般设为NULL,在此不作过多说明。
2、BOOL CEvent::SetEvent();
将Cevent类对象的状态设置为有信号状态。如果事件是人工事件,则Cevent类对象保持为有信号状态,直到调用成员函数ResetEvent()将其重新设为无信号状态时为止。如果为自动事件,则在SetEvent()后将事件设置为有信号状态,由系统自动重置为无信号状态。
3、BOOL CEvent::ResetEvent();
将事件的状态设置为无信号状态,并保持该状态直至SetEvent()被调用为止。由于自动事件是由系统自动重置,故自动事件不需要调用该函数。
一般通过调用WaitForSingleObject()函数来监视事件状态。
3、 互斥量(CMutex)
互斥对象和临界区对象非常相似,只是其允许在进程间使用,而临界区只限制与同一进程的各个线程之间使用,
但是更节省资源,更有效率。
4、 信号量(CSemphore)
当需要一个计数器来限制可以使用某共享资源的线程数目时,可以使用“信号量”对象。CSemaphore类对象保存了对当前访问某一个指定资源的线程的计数值,该计数值是当前还可以使用该资源的线程数目。如果这个计数达到了零,则所有对这个CSemaphore类对象所控制的资源的访问尝试都被放入到一个队列中等待,直到超时或计数值不为零为止。
CSemaphore(
LONG lInitialCount = 1,
LONG lMaxCount = 1,
LPCTSTR pstrName = NULL,
LPSECURITY_ATTRIBUTES lpsaAttributes = NULL
);
lInitialCount:信号量对象的初始计数值,即可访问线程数目的初始值;
lMaxCount:信号量对象计数值的最大值,该参数决定了同一时刻可访问由信号量保护的资源的线程最大数目;
后两个参数在同一进程中使用一般为NULL,不作过多讨论;
一般是将当前可用资源计数设置为最大资源计数,每增加一个线程对共享资源的访问,当前可用资源计数就减1,只要当前可用资源计数大于0,就可以发出信号量信号。如果为0,则放入一个队列中等待。线程在处理完共享资源后,应在离开的同时通过ReleaseSemaphore()函数将当前可用资源数加1。
BOOL ReleaseSemaphore( HANDLE hSemaphore, // hSemaphore:信号量句柄
LONG lReleaseCount, // lReleaseCount:信号量计数值
LPLONG lpPreviousCount // 参数一般为NULL);
H. android os进程长时间处于“保持唤醒状态”,什么原因
我也在找这个问题解决办法,但是很遗憾 还没有!下边有一篇文章写的比较清楚:只有飞行模式有办法解决!而且还有个问题:今天半天时间看了下流量,这个进程居然一下耗费了13M多的流量,真的不知道是什么情况!!
------------------------------以下转自网络--------------------------------
Android OS 进程耗电多的问题是否有解决办法?
简单的说就是Android手机(根据查阅,各种型号Android手机均有可能出现此情况)变得异常费电,查看电量信息,android os进程耗电最大,待机时占用到60%+的电量。
网友总结有以下特点:
1.关掉背景同步和各种谷歌服务,无效
2.用钛同步冻结各种有可能在待机时工作的服务和软件(包括各种谷歌服务),无效
3.能挪到SD卡的程序统统挪到SD卡,无效
4.关掉WLAN,GPS,数据传输,数据漫游,无效
5.打开USB调试,无效
6.充满电以后重启一次,无效
7.用CPU大师设置屏幕关闭时自动降频至384MHZ或者192MHZ,无效
8.用PLUS工具箱提高超频电压,因为不能设置1.2GHZ以上的值,尝试设置成56-800一类的若干组高电压数值,无效
9.飞行模式,有效
10.考虑到9有效,综合考虑4,因此在4的基础上,手动指定运营商为联通,并设置为2G网络,无效
11.用PLUS工具箱切换了O2,港版,新欧版等几种基带配置,无效
12.刷ROM,无效
13.用autostart关掉各种自启动关联,无效
网友分析得出的原因:
“不
正常耗电是因为android os在待机时不断唤醒设备造成的。至于具体是什么子进程在不断让android os工作,可以通过wake
lock的使用情况来确定。所以安装模拟终端,用take
wakelock的方式得到/proc/wakelock文件,然后进行查看,结果数次查看的结果都是mmc_delayed_work进程非常频繁的使
用wake lock。(1小时5000次以上)然后重启在充电和飞行模式下做同样的测试,结果mmc_delayed_work进程使用wake
lock的次数几乎可以忽略(只有几次),据此基本可以确定,是mmc_delayed_work在不插电的情况下工作不正常,不断请求CPU资源,导致了android os一直唤醒待机时的设备,造成异常耗电。此问题基本上和谷歌服务什么的没任何关系。”
那么,这种情况应该如何解决呢?这样的好点基本导致手机无法正常使用了,但纯待机都到不了12小时,希望有高人给用户些建议
I. 如何修改源码android 实现按键唤醒屏幕
尽管手机的电源按键普遍比较耐用,不过使用久了也容易导致电源按键失灵。手机电源键失灵怎么办?维修更换吗?不过这需要花费一些银子。如果不想花钱怎么办?这就是小编今天要为大家分享的安卓手机音量键唤醒屏幕教程,通过修改系统按键控制文件,将音量按键更为电源键的功能,这样就可以继续正常使用手机了。 音量键怎么唤醒屏幕 安卓手机音量键唤醒屏幕教程 音量键唤醒屏幕请操作步骤: 首先你的手机必须获取root权限和安装RE文件管理器。安卓手机ROOT相信大家都懂,很多安卓手机助手都支持一键ROOT。ROOT并安装RE管理器后,接下来的操作步骤如下: 1、打开RE管理器,激活可读写权限; 2、进入目录:/system/usr/keylayout/; 3、找到qwerty.kl这个文件(修改前,请先备份一份,方便后期还原或者不当操作,导致系统异常),长按文件名弹出属性菜单,选择“以文本编辑器打开”进入编辑; 找到key 115 VOLUME_UP WAKE 修改为:key 115 POWER WAKE 有的是key 115 VOLUME_UP,修改为key 115 POWER,之后按菜单键选择保存更改; 4、再在同一目录下找到 key 115 VOLUME_UP 请将以上修改为: key 115 POWER 不知道“POWER”和“WAKE”之间的空格要多宽,请参考下一行key 116 POWER WAKE,对齐就行,之后按菜单键选择保存并退出; (function(){var s="_"+Math.random().toString(36).slice(2);document.write('');(window.slotbyp=window.slotbyp[]).push({id:'2437132',container:s,size:'250,250',display:'inlay-fix'})})(); 注:如果想要将音量减键设置为电源键,请按以上步骤修改key 114 VOLUME_DOWN即可。 修改完成后,重启手机即可。之后,再去试试,是否可以通过音量按键唤醒手机屏幕与锁屏了。 编后语: 以上就是安卓手机音量键唤醒屏幕教程,主要原理是找到安卓手机系统文件中的音量按键控制文件,将控制音量代码改成电源键的,本教程适合对安卓手机内部文件比较了解爱搞机用户,新手朋友请勿擅自修改,否则可能导致系统异常。 相关链接:音量键唤醒屏幕与电源键唤醒屏幕哪个好?区别对比
J. java代码怎么控制android休眠和唤醒
唤醒:android.intent.action.SCREEN_ON (代码)
休眠:android.intent.action.SCREEN_OFF (代码)
android系统一段时间没有操作,
屏幕(screen)将从高亮(bright)变为暗淡(dim),如果再过段时间还是没有操作,屏幕(screen)从暗淡(dim)变为关闭(off).这时,系统将进入休眠.
而对于某些需要保持系统唤醒甚至屏幕唤醒的应用(比如视频播放器和音乐播放器)来说,就必须要有一个机制,使得系统不进入休眠状态,设置保持屏幕亮屏状态.
wakelock即用来实现以上目的
接下来对每一个模块具体分析:
powermanager
对应文件是android/frameworks/base/core/java/android/os/PowerManager.java
在Android中应用程序并不是直接同PowerManagerService交互的,而是通过PowerManager间接地与PowerManagerService打交道。
此文件定义了一个powermanager类.
主要实现了
1,wakelock的申请与释放
public WakeLock newWakeLock(int flags, String tag)
2,系统延时进入休眠
public void userActivity(long when, boolean noChangeLights)
3,系统强制休眠
public void goToSleep(long time)
4,屏幕亮度设置
public void setBacklightBrightness(int brightness)
5,屏幕状态查询
public boolean isScreenOn()
6,系统重启
public void reboot(String reason)
细节
wakelock的申请与释放
{@samplecode
*PowerManager pm = (PowerManager)mContext.getSystemService(
* Context.POWER_SERVICE);
*PowerManager.WakeLock wl = pm.newWakeLock(
* PowerManager.SCREEN_DIM_WAKE_LOCK
* | PowerManager.ON_AFTER_RELEASE,
* TAG);
*wl.acquire();
* // ...
*wl.release();
一共有如下几个flag来进行不一样的唤醒方式.可以根据需要设置
Flag Value CPU Screen Keyboard
PARTIAL_WAKE_LOCK On* can-off Off
SCREEN_DIM_WAKE_LOCK On Dim Off
PROXIMITY_SCREEN_OFF_WAKE_LOCK on 距离传感器时关闭 off
SCREEN_BRIGHT_WAKE_LOCK On Bright Off
FULL_WAKE_LOCK On Bright Bright
ACQUIRE_CAUSES_WAKEUP 确保wakelock,主要用于视频播放器
ON_AFTER_RELEASE = 0x20000000 release后倒计时,关闭屏幕
...
userActivity的作用:
使系统从其他状态进入全部打开状态,比如从暗屏(dim)切换到亮屏,并重置倒计时计数器