转自: 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中,由于主线...
线程优先级** 大多数时候,我们使用的是顺序编程方式,即所有的进程只按单一顺序进行。虽然大部分编程问题可以通过顺序编程解决,但如果能让程序中的多个部分并行执行,则会变得更加方便和必要。线程的优先级决定...
在Java中,实现多线程有两种主要方法: 1. **扩展`Thread`类**:通过继承`Thread`类并重写`run()`方法来定义新的线程行为。 ```java public class MitiSay extends Thread { public MitiSay(String threadName) ...
标题“跨线程调用控件的四种方式”涉及到的核心知识点包括线程同步、UI线程和后台线程之间的交互以及.NET Framework提供的几种处理机制。下面将详细解释这四种方法。 1. **Invoke/BeginInvoke** 这是.NET ...
Handler有两种构造方法,一种不带参数,它会自动关联到当前线程的Looper;另一种接受一个Looper参数,可以指定处理消息的线程。 在子线程中,如果想要创建一个与子线程关联的Handler,通常需要在run()方法内调用`...
- 创建线程有两种方式:继承`Thread`类或者实现`Runnable`接口。继承`Thread`直接重写`run()`方法,而实现`Runnable`接口则需要提供一个包含业务逻辑的`run()`方法,并通过`Thread`对象携带`Runnable`实例来启动...
描述中提到的“双重检索获取单例对象”是单例模式的一种实现方式,确保在多线程环境下安全地创建单例。这种实现通常包括两层检查:首先检查实例是否已经存在,如果不存在,再加锁创建并缓存实例。这样既能保证线程...
`nPriority` 和 `nStackSize` 分别用于设置线程的优先级和栈空间大小;`dwCreateFlags` 可以设置线程创建后的状态;`lpSecurityAttrs` 用于设置线程的安全属性。 #### 方法一:通过全局函数更新控件内容 这种方法...
在JNI中回调Java方法主要有两种方式: 1. **使用JNIEnv**:JNIEnv是一个指向一系列函数指针的结构体,它提供了在本地代码中调用Java方法的接口。当JNI函数被Java方法调用时,JNIEnv会被自动传入。但是,如果在本地...
在IT行业中,多线程和后台下载是两个关键的技术概念,尤其在开发高效、响应迅速的应用程序时。本文将深入探讨这两个主题,并结合具体的后台服务和下载技术来讲解它们的实际应用。 首先,让我们理解什么是多线程。在...
1. **创建线程**:创建一个新的线程通常有两种方式,一是通过继承`Thread`类并重写`run()`方法,二是实现`Runnable`接口并传递给`Thread`构造函数。在这个实例中,可能采用了其中的一种或两种方法来创建线程。 2. *...
Java中可以通过两种主要方式创建线程: 1. **继承`Thread`类** - 创建一个新的类继承自`java.lang.Thread`类,并重写`run()`方法。 - 示例: ```java public class MyThread extends Thread { public void run...
5. **线程调度**:了解 `ThreadPriority`,设置线程优先级以影响调度策略。 6. **线程池**:使用 `ExecutorService` 和 `ThreadPoolExecutor` 创建线程池,有效管理并复用线程,避免资源浪费。 7. **死锁检测与预防*...
#### Java中实现多线程的两种方式 1. **继承Thread类**:这是实现多线程最直接的方式。通过继承`java.lang.Thread`类,重写其中的`run()`方法来定义线程的行为。这种方式简单明了,可以直接控制线程,但缺点是Java...
Luban通常使用JPEG和PNG两种格式进行压缩,而Flora可能引入了新的算法或策略,使得在快速压缩的同时,还能尽可能地保留图像的细节和色彩。 2. **外围API的丰富**: 提供更多的API接口意味着开发者可以自定义更多...
Android 操作系统同时支持这两种 UI 开发方式。 Android 操作系统最引人注目的特性之一是,它允许第三方应用程序执行的优先级与系统自带的应用程序相同。这与大多数操作系统不同,因为它们通常将系统应用程序的执行...
通常我们会使用`AsyncTask`或者`Thread`来创建线程,但因为这两个方式存在一些限制,对于大量并发的下载任务,更适合使用`ExecutorService`配合`ThreadPoolExecutor`,以更好地控制线程池的大小和行为。创建线程池时...
这两个文件可以作为起点,帮助开发者理解如何在实际应用中实现Android与PC之间的蓝牙通信。 总的来说,Android与PC通过蓝牙通信涉及到的知识点包括: 1. Android Bluetooth API的使用,如BluetoothAdapter、...
.threadPriority(Thread.NORM_PRIORITY - 2) // 设置线程优先级 .denyCacheImageMultipleSizesInMemory() // 禁止缓存不同尺寸的图片 .diskCache(new UnlimitedDiskCache(cacheDir)) // 设置磁盘缓存 .build(); ...
Android有五种进程优先级:前台进程、可视进程、服务进程、后台进程和空进程。根据组件的状态和当前系统资源状况,Android会决定哪些进程需要保留在内存中,哪些进程可以被回收。比如,Service虽然不在UI层面上,但...