`

android 设置线程的优先级

阅读更多
有两处API可以设置线程的优先级:

(1)android.os.Process.setThreadPriority (int priority)
android.os.Process.setThreadPriority (int tid, int priority)

priority:【-20, 19】,高优先级 -> 低优先级。

(2)java.lang.Thread.setPriority (int priority)

priority:【1, 10】,低优先级 -> 高优先级。

测试后发现,使用android自己的API(第1种方法)设置的优先级,对线程调度影响显著。

=====================
测试代码如下:
=====================
package com.test.testx;

import android.app.Activity;
import android.os.Bundle;
import android.os.Process;
import android.util.Log;

public class TestThreadPriority extends Activity {
    private static final String TAG ="TestThreadPriority";

    private boolean mNeedExit = false;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        MyThread a = new MyThread("Thread A");
        a.setOSPriority(Process.THREAD_PRIORITY_LOWEST); // 19
        a.setPriority(Thread.MAX_PRIORITY); // 10

        MyThread b = new MyThread("Thread B");
        b.setOSPriority(Process.THREAD_PRIORITY_URGENT_AUDIO); // -19
        b.setPriority(Thread.MIN_PRIORITY); // 1

        a.start();
        b.start();
    }

    @Override
    public void onBackPressed() {
        mNeedExit = true;
        super.onBackPressed();
    }

    private class MyThread extends Thread {
        private int mOSPriority = Process.THREAD_PRIORITY_DEFAULT;
        private int mLoopCount = 0;

     public MyThread(String threadName) {
            super(threadName);
     }

     public void setOSPriority(int p) {
            mOSPriority = p;
     }

    @Override
    public void run() {
        Process.setThreadPriority(mOSPriority);

        while(!mNeedExit) {
            mLoopCount ++;
            Math.log(Math.random() * 1000); // calculation test

            Log.d(TAG, new StringBuilder().append(getName())
                    .append(" os priority: ").append(mOSPriority)
                    .append(" java priority: ").append(getPriority())
                    .append(" loop count: ").append(mLoopCount).toString());
            }

            Log.d(TAG, new StringBuilder().append(getName()).append(" exiting...")
                    .append(" os priority: ").append(mOSPriority)
                    .append(" java priority: ").append(getPriority())
                    .append(" loop count: ").append(mLoopCount).toString());
        }
    }
}
分享到:
评论

相关推荐

    activity生命周期、线程优先级、异常销毁、任务栈

    线程优先级在多线程环境中至关重要,Android中的线程优先级分为三类:后台(Thread.MIN_PRIORITY)、正常(Thread.NORM_PRIORITY)、前台(Thread.MAX_PRIORITY)。默认情况下,新创建的线程优先级为正常。提高线程...

    Android-用于app模块初始化可区分进程线程并设置优先级

    - **Android原生线程优先级**:分为THREAD_PRIORITY_FOREGROUND、THREAD_PRIORITY_BACKGROUND等,调整线程优先级可以影响CPU时间片分配,优化系统资源使用。 - **自定义线程池**:通过ThreadPoolExecutor可以创建...

    Android线程的优先级设置方法技巧

    因此,理解并掌握线程优先级设置的方法对于提升Android应用的性能至关重要。 Android系统基于Java的Thread类来管理线程,开发者可以通过调用`Process.setThreadPriority()`方法来改变线程的优先级。例如,如果你...

    安卓开发框架工具类相关-activity生命周期线程优先级异常销毁任务栈.zip

    Android中主要有三种线程优先级:低优先级(THREAD_PRIORITY_LOW)、正常优先级(THREAD_PRIORITY_NORMAL)和高优先级(THREAD_PRIORITY_HIGH)。合理设置线程优先级可以优化应用性能,避免不必要的等待和资源浪费。...

    Android多线程操作

    Android中可以通过`setPriority()`方法设置线程优先级,但通常不建议这样做,因为Android系统并不保证优先级的执行顺序,且可能导致不公平的资源分配。 五、异步任务的最佳实践 1. 尽量减少主线程的负载,将耗时...

    Android开发中的多线程编程技术

    开发者应谨慎设置线程优先级,避免过度干预系统调度。 五、源代码分析 资源包中的"Android开发中的多线程编程技术.docx"可能包含各种多线程编程的实例代码和详细解释,有助于深入理解如何在实践中运用多线程技术。 ...

    android SDK线程.rar

    10. **线程优先级**:虽然Android系统对线程优先级的控制相对有限,但了解线程优先级的概念可以帮助开发者理解线程调度和性能优化。 理解并熟练掌握这些线程管理技术对于开发高性能和用户体验良好的Android应用至关...

    Android多线程下载

    线程池可以控制并发线程的数量,避免大量创建和销毁线程带来的性能开销,同时提供任务调度和优先级管理。 3. **下载任务分解**:根据文件大小,将其划分为若干块,每块作为一个下载任务分配给线程。块大小的选择需...

    Android 多线程图片下载开源代码

    在Android开发中,多线程图片下载是一个常见的需求,尤其在大数据量或者高并发的情况下,单线程下载图片会严重影响用户体验,因为这可能导致UI线程阻塞,使得应用显得卡顿。这篇博客“Android 多线程图片下载开源...

    Android多线程处理

    - Android中,线程的优先级由`Thread.Priority`枚举定义,但实际效果可能受设备和系统状态影响,不应过分依赖线程优先级来控制执行顺序。 8. **性能优化**: - 避免过多创建线程,线程创建和销毁有开销,可使用...

    Java/Android关于线程使用的总结

    ### Java/Android线程使用深度解析 在计算机科学领域,线程与进程是核心概念,尤其是在多任务操作系统中。本文将深入探讨Java/Android环境下的线程管理,包括线程的创建、线程池的利用及`ThreadHandler`的运用等...

    Android多线程处理[参考].pdf

    Android多线程处理是移动应用开发中的关键概念,尤其是在性能优化和用户体验提升方面。Android系统采用的是单线程模型,即主线程(也称为UI线程)主要负责处理用户界面的交互和绘图,包括按键事件、触摸事件以及屏幕...

    android多线程例子

    9. **线程优先级**:虽然Android系统并不严格遵循线程优先级,但理解这一概念仍然是有益的,线程优先级可以影响调度策略,但不应过度依赖它。 10. **线程安全**:当多个线程访问共享资源时,必须确保正确性和一致性...

    android多线程下载器

    除了基本的多线程下载,还可以考虑实现其他高级特性,比如连接池(连接复用)、线程优先级调度(根据网络状况调整线程数)和下载限速。另外,为了优化用户体验,可以引入下载管理器,统一管理所有下载任务,支持批量...

    Android 线程 多线程 Multi-thread

    线程优先级** 大多数时候,我们使用的是顺序编程方式,即所有的进程只按单一顺序进行。虽然大部分编程问题可以通过顺序编程解决,但如果能让程序中的多个部分并行执行,则会变得更加方便和必要。线程的优先级决定...

    Android线程问题.rar

    10. **线程优先级**:虽然Android系统不再鼓励设置线程优先级,但在某些情况下,了解线程的优先级(如Thread.NORM_PRIORITY、Thread.MAX_PRIORITY等)仍有助于优化线程调度。 通过深入学习和实践这些知识点,开发者...

    31.软硬整合开发的基础认识Android的线程Thread模式[参照].pdf

    7. **线程优先级**:Android系统会根据线程的优先级调度执行,但开发者通常不应直接设置线程优先级,因为这可能导致不可预测的行为和性能问题。 8. **线程池**:对于大量短生命周期的线程,使用线程池可以提高效率...

    Android-AppExecutor应用线程池可以指定任务的优先级完全kotlin

    2. **线程优先级**:设计一个优先级模型,如低、中、高,或者使用数字表示优先级,确保高优先级任务可以优先获取执行机会。 3. **任务调度**:实现一个调度策略,例如使用优先级队列,优先处理优先级高的任务。 4. *...

    android native c++ thread

    虽然Android系统允许设置线程优先级,但过度依赖它可能导致调度问题和其他性能问题。通常情况下,保持默认优先级并优化代码以减少阻塞是更好的选择。 理解并熟练运用这些知识点,开发者就能在Android平台上有效地...

Global site tag (gtag.js) - Google Analytics