2022-07-30 在android service打开一个线程,一直在运行,某事件发生后发送广播把消息传递出去。涉及Handler、Thread、Broadcast的使用。

 一、需求是 在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这个事件之后就发送广播,接收到这个广播收会弹出下面窗口。

猜你喜欢

转载自blog.csdn.net/qq_37858386/article/details/126074389