Android线程优化--总体
发布日期:2021-05-06 19:10:15 浏览次数:26 分类:技术文章

本文共 2124 字,大约阅读时间需要 7 分钟。

线程优化

 

 

线程调度

(1)分时调度:轮流获取,均匀CPU时间

(2)抢占式调度:优先级高的获取,jvm采用

 

Android线程调度

(1)nice值

          Process类中定义,

          值越小,优先级越高

           默认是THREAD_PRIORITY_DEFAULT,0

(2)cgroup   (如果由1个高优先级,10个低优先级的线程,这是就需要cgroup了)

           更严格的群组调度策略

           保证前台线程可以获取到更多的CPU

 

 

 

异步方式

(1)Thread

(2)HandlerThread

(3)IntentService

(4)AsyncTask

(5)线程池

(6)RXJava

 

 

 

线程优化实战

 

线程使用准则

(1)严禁直接 new Thread

(2)提供基础的线程池供各个业务线使用

      避免各个业务线各自维护一套线程池,导致线程数过多

(3)根据任务类型选择合适的异步方式

    优先级低,长时间执行,HandleThread

(4)创建线程必须命名

    方便定位线程归属

    运行期Thread.currentThread().setName 修改线程名字

(5)关键异步任务监控

    异步不等于不耗时

    AOP的方式做监控

(6)重视优先级设置

    Process.setThreadPriority();

    可以设置多次

 

 

如何锁定线程创建者

 

// hook线程,对应视频的7-5节        DexposedBridge.hookAllConstructors(Thread.class, new XC_MethodHook() {            @Override            protected void afterHookedMethod(MethodHookParam param) throws Throwable {                super.afterHookedMethod(param);                Thread thread = (Thread) param.thisObject;                LogUtils.i(thread.getName()+" stack "+Log.getStackTraceString(new Throwable()));            }        });

 

 

线程收敛优雅实践

 

 

 

public class ThreadPoolUtils {    private int CPUCOUNT = Runtime.getRuntime().availableProcessors();    private ThreadPoolExecutor cpuExecutor = new ThreadPoolExecutor(CPUCOUNT, CPUCOUNT,            30, TimeUnit.SECONDS, new LinkedBlockingDeque
(), sThreadFactory); private ThreadPoolExecutor iOExecutor = new ThreadPoolExecutor(64, 64, 30, TimeUnit.SECONDS, new LinkedBlockingDeque
(), sThreadFactory); private static final ThreadFactory sThreadFactory = new ThreadFactory() { private final AtomicInteger mCount = new AtomicInteger(1); public Thread newThread(Runnable r) { return new Thread(r, "ThreadPoolUtils #" + mCount.getAndIncrement()); } }; public static ExecutorService getService() { return sService; } private static ExecutorService sService = Executors.newFixedThreadPool(5, new ThreadFactory() { @Override public Thread newThread(Runnable r) { Thread thread = new Thread(r, "ThreadPoolUtils"); Process.setThreadPriority(Process.THREAD_PRIORITY_BACKGROUND); return thread; } });}

 

 

 

 

上一篇:Android网络优化--概括
下一篇:Android卡顿优化--界面秒开

发表评论

最新留言

做的很好,不错不错
[***.243.131.199]2025年04月07日 17时13分10秒