System server里创建常见的几个thread

 

https://blog.csdn.net/songyinzhong/article/details/52275031

 

 

android.ui :@WatchDog.java

         // Add checker for shared UI thread.
            mHandlerCheckers.add(new HandlerChecker(UiThread.getHandler(),
                "ui thread", DEFAULT_TIMEOUT));

    private UiThread() {
        super("android.ui", android.os.Process.THREAD_PRIORITY_FOREGROUND, false );
    }
  •  

static final long DEFAULT_TIMEOUT = DB ? 10*1000 : 60*1000; //默认为60s 
主要处理: 
1. AMS UiHandler里show各种msg 
2. DisplayManagerService里的overlay相关msg 
3. PointerEventDispatcher inputevent相关 
4. VoiceInteractionManagerService Voice交互 
5. WindowManagerPolicy init操作

android.bg BackgroundThread @AMS

final Handler mBgHandler = new Handler(BackgroundThread.getHandler().getLooper())   
    private BackgroundThread() {
        super("android.bg", android.os.Process.THREAD_PRIORITY_BACKGROUND);
    }
  •  

主要处理这两件事情:@mBgHandler.handleMessage() 
CHECK_INTERNET_PERMISSION_MSG 
COLLECT_PSS_BG_MSG

android.fg:@WatchDog.java

    mMonitorChecker = new HandlerChecker(FgThread.getHandler(),
                "foreground thread", DEFAULT_TIMEOUT);
    private FgThread() {
        super("android.fg", android.os.Process.THREAD_PRIORITY_DEFAULT, true /*allowIo*/);
    }
  •  

主要用于: 
1. AccountManagerService 
2. BatteryStatsService 
3. DreamManagerService 
4. MountService 
5. NetworkManagementService 
6. PackageManagerService 
7. usb相关(debug, device, portmanager) 
8. WindowManagerService(screenshotApplicationsInner)

android.io: @WatchDog.java

        mHandlerCheckers.add(new HandlerChecker(IoThread.getHandler(),
                "i/o thread", DEFAULT_TIMEOUT));
    private IoThread() {
        super("android.io", android.os.Process.THREAD_PRIORITY_DEFAULT, true /*allowIo*/);
    }
  •  

主要有用于: 
1.BluetoothManagerService 相关操作 
2.MountService里的obb操作 
3.Tethering 网络共享(usb /wifi/mobile?) 
4.TvInputManagerService tv里channel session相关

android.display:@WatchDog.java

        mHandlerCheckers.add(new HandlerChecker(DisplayThread.getHandler(),
                "display thread", DEFAULT_TIMEOUT));
    private DisplayThread() {
        super("android.display", android.os.Process.THREAD_PRIORITY_DISPLAY, false );
    }
  •  

主要用于: 
1. DisplayManagerService(display adapter,viewport ,event…) 
2. InputManagerService (keyboard , input device …) 
3. WindowManagerService 实例的创建

system server main thread:

        mHandlerCheckers.add(new HandlerChecker(new Handler(Looper.getMainLooper()),
                "main thread", DEFAULT_TIMEOUT));
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
优化下面代码package Y; import java.io.*; import java.net.*; import java.time.*; import java.util.*; public class Shiyan5Server { public static void main(String[] args) { ServerSocket server = null; Sy5ServerThread thread; Socket you = null; while(true) { try { server = new ServerSocket(2010); } catch (IOException e) { System.out.println("正在监听"); // TODO: handle exception } try { System.out.println("等待客户呼叫"); you = server.accept(); System.out.println("客户的地址"+you.getInetAddress()); } catch (Exception e) { // TODO: handle exception System.out.println("正在等待客户"); } if (you != null) { new Sy5ServerThread(you).start(); } } } } class Sy5ServerThread extends Thread{ Socket socket; DataOutputStream out = null; DataInputStream in = null; String s = null; Sy5ServerThread(Socket t) { socket = t; try { out = new DataOutputStream(socket.getOutputStream()); in = new DataInputStream(socket.getInputStream()); } catch (Exception e) { // TODO: handle exception } } public void run() { while(true) { try { String S1 = "几点了?"; String S2 = "今天是几号?"; String S3 = "今天是星期几?"; String st = in.readUTF(); if (st.equals(S1)) { LocalTime time = LocalTime.now(); String Time = String.format("%tR", time); out.writeUTF(Time); } else if(st.equals(S2)) { LocalDate date = LocalDate.now(); String Time = String.format("%tm月%td日", date,date); out.writeUTF(Time); }else if (st.equals(S3)) { LocalDate week = LocalDate.now(); String Time = String.format("%tA", week); out.writeUTF(Time); }else { System.out.println("服务结束"); break; } } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); }} } }
最新发布
05-26
以下是代码的优化: 1. 将ServerSocket的创建放在while循环的外部,否则每次循环都会重新创建一个ServerSocket对象,浪费资源。 2. 在catch语句中添加具体的异常处理代码,避免出现异常时程序无法正常执行。 3. 在Sy5ServerThread类的构造函数中,将out和in的初始化放在try语句块中,避免出现异常时无法正确初始化。 4. 将字符串常量定义为静态常量,避免在运行时重复创建对象,浪费资源。 5. 在while循环中添加try-catch语句,避免出现异常时程序中断。 改进后的代码如下: ``` package Y; import java.io.*; import java.net.*; import java.time.*; import java.util.*; public class Shiyan5Server { private static final String S1 = "几点了?"; private static final String S2 = "今天是几号?"; private static final String S3 = "今天是星期几?"; public static void main(String[] args) { ServerSocket server = null; Socket you = null; try { server = new ServerSocket(2010); System.out.println("正在监听"); } catch (IOException e) { e.printStackTrace(); } while (true) { try { System.out.println("等待客户呼叫"); you = server.accept(); System.out.println("客户的地址" + you.getInetAddress()); new Sy5ServerThread(you).start(); } catch (Exception e) { System.out.println("正在等待客户"); e.printStackTrace(); } } } } class Sy5ServerThread extends Thread { private static final String S1 = "几点了?"; private static final String S2 = "今天是几号?"; private static final String S3 = "今天是星期几?"; private Socket socket; private DataOutputStream out; private DataInputStream in; Sy5ServerThread(Socket t) { socket = t; try { out = new DataOutputStream(socket.getOutputStream()); in = new DataInputStream(socket.getInputStream()); } catch (IOException e) { e.printStackTrace(); } } public void run() { while (true) { try { String st = in.readUTF(); if (st.equals(S1)) { LocalTime time = LocalTime.now(); String Time = String.format("%tR", time); out.writeUTF(Time); } else if (st.equals(S2)) { LocalDate date = LocalDate.now(); String Time = String.format("%tm月%td日", date, date); out.writeUTF(Time); } else if (st.equals(S3)) { LocalDate week = LocalDate.now(); String Time = String.format("%tA", week); out.writeUTF(Time); } else { System.out.println("服务结束"); break; } } catch (IOException e) { e.printStackTrace(); } } } } ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值