一、需求是 在android service打开一个线程,一直在运行,某事件发生后发送广播把消息传递出去。
diff --git a/services/core/java/com/android/server/power/PowerManagerService.java b/services/core/java/com/android/server/power/PowerManagerService.java
index 921c107..25ffc41 100755
--- a/services/core/java/com/android/server/power/PowerManagerService.java
+++ b/services/core/java/com/android/server/power/PowerManagerService.java
@@ -524,6 +524,28 @@ public final class PowerManagerService extends SystemService
public WifiManager wifiManager;
public boolean DeepSleepCloseWIFI = false;
+
+ private static final int TIME_MESSAGE = 100;
+ int timeCount = 0;
+ private Handler timeHandler = new Handler() {
+ @Override
+ public void handleMessage(@NonNull Message msg) {
+ super.handleMessage(msg);
+ switch (msg.what) {
+ case TIME_MESSAGE:
+ final int number = (int) msg.obj;
+ Slog.d(TAG, "Received message-TIME_MESSAGE number="+number);
+ if(number == 60){
+ Intent tempwarning = new Intent("PNW.clickedTempWarning");
+ mContext.sendBroadcast(tempwarning);
+ }
+ break;
+ default:
+ break;
+ }
+ }
+ };
+
// The screen brightness mode.
// One of the Settings.System.SCREEN_BRIGHTNESS_MODE_* constants.
private int mScreenBrightnessModeSetting;
@@ -894,6 +916,31 @@ public final class PowerManagerService extends SystemService
mHandlerThread = new ServiceThread(TAG,
Process.THREAD_PRIORITY_DISPLAY, false /*allowIo*/);
mHandlerThread.start();
+
+ new Thread(new Runnable() {
+ @Override
+ public void run() {
+ while (timeCount < 380) {
+ try {
+ Thread.sleep(1000);
+ timeCount++;
+ /*
+ Message message = Message.obtain();
+ message.what = TIME_MESSAGE;
+ timeHandler.sendMessage(message);
+ */
+ Message msg = timeHandler.obtainMessage(TIME_MESSAGE, timeCount);
+ msg.setAsynchronous(true);
+ msg.sendToTarget();
+
+ Slog.d(TAG, "obtainMessage sendToTarget,timeCount:" + timeCount);
+ } catch (InterruptedException e) {
+ e.printStackTrace();
+ }
+ }
+ }
+ }).start();
+
mHandler = injector.createHandler(mHandlerThread.getLooper(),
new PowerManagerHandlerCallback());
mConstants = new Constants(mHandler);
二、查看log
三、满足number等于60这个事件之后就发送广播,接收到这个广播收会弹出下面窗口。