阅读:5360回复:1

framework某些service中发送广播操作UI的常规方法

楼主#
更多 发布于:2019-08-01 11:31
最近在项目需要在android9.0的项目framework中的PowerManagerService.java文件中发送广播,但是直接发送却报错。

W Watchdog: *** WATCHDOG KILLING SYSTEM PROCESS: Blocked in monitor com.android.server.am.ActivityManagerService on foreground thread (android.fg), Blocked in handler on main thread (main), Blocked in handler on PowerManagerService (PowerManagerService)

后面调试发现9.0和7.1确实不一样。google改了设计。9.0中在framework的部分service中发送广播护着做其他操作方法如下:

import com.android.internal.os.BackgroundThread;

BackgroundThread.getHandler().post(new Runnable(){
 @Override
 public void run() {
 Intent intent = new Intent(Intent.ACTION_SCREEN_OFF);
 intent.addFlags(Intent.FLAG_RECEIVER_REGISTERED_ONLY);
 mContext.sendBroadcast(intent);
 }
});

=================================================================
在如果要在这些service里面操作UI,方法如下:

import com.android.server.UiThread;

// ShutdownThread must run on a looper capable of displaying the UI.
Message msg = Message.obtain(UiThread.getHandler(), runnable);
msg.setAsynchronous(true);
UiThread.getHandler().sendMessage(msg);

记录在此。

最新喜欢:

zhaoyf13zhaoyf...
If you have nothing to lose, then you can do anything.
沙发#
发布于:2019-08-01 11:39
厉害厉害
[url]http://190.lsal.cn/195/1329.gif?0728100424873[/url]
游客

返回顶部