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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值