`
zengyan2012
  • 浏览: 415115 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

android 设置线程优先级 两种方式

阅读更多

 

转自: http://www.eoeandroid.com/thread-112252-1-1.html

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种方法)设置的优先级,对线程调度影响显著.

------------------------------------------------

 

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());
		}
	}
}
 

 

分享到:
评论

相关推荐

    android线程和服务两种方式下载,广播通知栏同步更新进度

    本篇将深入探讨如何通过线程和服务两种方式实现网络下载,并利用广播来同步更新进度条和通知栏。这两种方法都是为了优化用户体验,确保用户能够实时了解下载状态。 首先,我们来看线程下载。在Android中,由于主线...

    Android 线程 多线程 Multi-thread

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

    Android多线程程序设计

    在Java中,实现多线程有两种主要方法: 1. **扩展`Thread`类**:通过继承`Thread`类并重写`run()`方法来定义新的线程行为。 ```java public class MitiSay extends Thread { public MitiSay(String threadName) ...

    跨线程调用控件的四种方式.rar

    标题“跨线程调用控件的四种方式”涉及到的核心知识点包括线程同步、UI线程和后台线程之间的交互以及.NET Framework提供的几种处理机制。下面将详细解释这四种方法。 1. **Invoke/BeginInvoke** 这是.NET ...

    Android下的多线程

    Handler有两种构造方法,一种不带参数,它会自动关联到当前线程的Looper;另一种接受一个Looper参数,可以指定处理消息的线程。 在子线程中,如果想要创建一个与子线程关联的Handler,通常需要在run()方法内调用`...

    JAVA中的线程知识点整理

    - 创建线程有两种方式:继承`Thread`类或者实现`Runnable`接口。继承`Thread`直接重写`run()`方法,而实现`Runnable`接口则需要提供一个包含业务逻辑的`run()`方法,并通过`Thread`对象携带`Runnable`实例来启动...

    线程管理工具类

    描述中提到的“双重检索获取单例对象”是单例模式的一种实现方式,确保在多线程环境下安全地创建单例。这种实现通常包括两层检查:首先检查实例是否已经存在,如果不存在,再加锁创建并缓存实例。这样既能保证线程...

    MFC子线程中更新控件内容的两种办法

    `nPriority` 和 `nStackSize` 分别用于设置线程的优先级和栈空间大小;`dwCreateFlags` 可以设置线程创建后的状态;`lpSecurityAttrs` 用于设置线程的安全属性。 #### 方法一:通过全局函数更新控件内容 这种方法...

    JNI层创建的线程中回调java方法

    在JNI中回调Java方法主要有两种方式: 1. **使用JNIEnv**:JNIEnv是一个指向一系列函数指针的结构体,它提供了在本地代码中调用Java方法的接口。当JNI函数被Java方法调用时,JNIEnv会被自动传入。但是,如果在本地...

    多线程--下载---后台运行

    在IT行业中,多线程和后台下载是两个关键的技术概念,尤其在开发高效、响应迅速的应用程序时。本文将深入探讨这两个主题,并结合具体的后台服务和下载技术来讲解它们的实际应用。 首先,让我们理解什么是多线程。在...

    android thread类pc验证实例

    1. **创建线程**:创建一个新的线程通常有两种方式,一是通过继承`Thread`类并重写`run()`方法,二是实现`Runnable`接口并传递给`Thread`构造函数。在这个实例中,可能采用了其中的一种或两种方法来创建线程。 2. *...

    Java线程,很全面地讲了java线程方面的东西,非常实用

    Java中可以通过两种主要方式创建线程: 1. **继承`Thread`类** - 创建一个新的类继承自`java.lang.Thread`类,并重写`run()`方法。 - 示例: ```java public class MyThread extends Thread { public void run...

    可管理线程demo

    5. **线程调度**:了解 `ThreadPriority`,设置线程优先级以影响调度策略。 6. **线程池**:使用 `ExecutorService` 和 `ThreadPoolExecutor` 创建线程池,有效管理并复用线程,避免资源浪费。 7. **死锁检测与预防*...

    android知识

    #### Java中实现多线程的两种方式 1. **继承Thread类**:这是实现多线程最直接的方式。通过继承`java.lang.Thread`类,重写其中的`run()`方法来定义线程的行为。这种方式简单明了,可以直接控制线程,但缺点是Java...

    Android-Flora可能是Android平台上最快的图片压缩框架

    Luban通常使用JPEG和PNG两种格式进行压缩,而Flora可能引入了新的算法或策略,使得在快速压缩的同时,还能尽可能地保留图像的细节和色彩。 2. **外围API的丰富**: 提供更多的API接口意味着开发者可以自定义更多...

    (完整版)基于Android开发的外文文献.pdf

    Android 操作系统同时支持这两种 UI 开发方式。 Android 操作系统最引人注目的特性之一是,它允许第三方应用程序执行的优先级与系统自带的应用程序相同。这与大多数操作系统不同,因为它们通常将系统应用程序的执行...

    多线程下载

    通常我们会使用`AsyncTask`或者`Thread`来创建线程,但因为这两个方式存在一些限制,对于大量并发的下载任务,更适合使用`ExecutorService`配合`ThreadPoolExecutor`,以更好地控制线程池的大小和行为。创建线程池时...

    Android与PC使用蓝牙通信

    这两个文件可以作为起点,帮助开发者理解如何在实际应用中实现Android与PC之间的蓝牙通信。 总的来说,Android与PC通过蓝牙通信涉及到的知识点包括: 1. Android Bluetooth API的使用,如BluetoothAdapter、...

    用Android-Universal-Image-Loader开发下载图片

    .threadPriority(Thread.NORM_PRIORITY - 2) // 设置线程优先级 .denyCacheImageMultipleSizesInMemory() // 禁止缓存不同尺寸的图片 .diskCache(new UnlimitedDiskCache(cacheDir)) // 设置磁盘缓存 .build(); ...

    Android 组件复用和进程关系

    Android有五种进程优先级:前台进程、可视进程、服务进程、后台进程和空进程。根据组件的状态和当前系统资源状况,Android会决定哪些进程需要保留在内存中,哪些进程可以被回收。比如,Service虽然不在UI层面上,但...

Global site tag (gtag.js) - Google Analytics