下面列出了android.os.Process#THREAD_PRIORITY_LOWEST 实例代码,或者点击链接到github查看源代码,也可以在右侧发表评论。
/**
* Return the appropriate thread priority for loading for a given page (we give the current
* page much higher priority)
*/
private int getThreadPriorityForPage(int page) {
int pageDiff = getWidgetPageLoadPriority(page);
if (pageDiff <= 0) {
return Process.THREAD_PRIORITY_LESS_FAVORABLE;
} else if (pageDiff <= 1) {
return Process.THREAD_PRIORITY_LOWEST;
} else {
return Process.THREAD_PRIORITY_LOWEST;
}
}
/**
* Return the appropriate thread priority for loading for a given page (we give the current
* page much higher priority)
*/
private int getThreadPriorityForPage(int page) {
// TODO-APPS_CUSTOMIZE: detect number of cores and set thread priorities accordingly below
int pageDiff = getWidgetPageLoadPriority(page);
if (pageDiff <= 0) {
return Process.THREAD_PRIORITY_LESS_FAVORABLE;
} else if (pageDiff <= 1) {
return Process.THREAD_PRIORITY_LOWEST;
} else {
return Process.THREAD_PRIORITY_LOWEST;
}
}
@IntRange(from = Process.THREAD_PRIORITY_FOREGROUND, to = Process.THREAD_PRIORITY_LOWEST)
int priority();
private void setDefaultOsPriority(int defaultOsPriority) {
if (defaultOsPriority < Process.THREAD_PRIORITY_URGENT_AUDIO || defaultOsPriority > Process.THREAD_PRIORITY_LOWEST) {
throw new IllegalArgumentException("Cannot set thread priority to " + defaultOsPriority);
}
mDefaultOsPriority = defaultOsPriority;
}
public void run() {
/* 设置任务线程为后台线程,获得更少的执行机会,减少对UI渲染的影响 */
int threadPriority = Process.getThreadPriority(Process.myTid());
if (threadPriority != Process.THREAD_PRIORITY_LOWEST) {
Process.setThreadPriority(Process.THREAD_PRIORITY_LOWEST);
}
final ImageLoadTask loadTask = seekReadyTask();
if (loadTask == null) {
handler.sendEmptyMessage(ACTION_LOAD_FINISH);
return;
}
try {
// 从磁盘去取
Bitmap bitmap = DiskCache.readCache(loadTask.getKey());
if (bitmap == null) {// 尚未缓存,从源去取
bitmap = loadFromSource(loadTask);
}
if (bitmap != null) {// 取得图片成功
// 将bitmap放入LruCache缓存列表
memoryCache.put(loadTask.filePath, bitmap);
}
final Bitmap finalBitmap = bitmap;
if (loadTask.getCallBack() != null) {
handler.post(new Runnable() {
@Override
public void run() {
loadTask.performCallback(finalBitmap);
}
});
}
} catch (OutOfMemoryError e) {
memoryCache.evictAll();
System.gc();
e.printStackTrace();
BDebug.e(TAG, "OutOfMemoryError!!!!!!!!!!!!!!!!!!!!:" + e.getMessage());
} finally {
if (loadTask != null) {
synchronized (taskList) {
taskList.remove(loadTask);
}
}
}
}
public ReadaheadThread() {
mScratch = new byte[BYTES_PER_READ];
HandlerThread handlerThread = new HandlerThread("ReadaheadThread", Process.THREAD_PRIORITY_LOWEST);
handlerThread.start();
mHandler = new Handler(handlerThread.getLooper(), this);
}
/**
* 优先级的范围,可根据Task重要程度及工作量指定;之后根据实际情况决定是否有必要放更大
*
* @return
*/
@IntRange(from = Process.THREAD_PRIORITY_FOREGROUND, to = Process.THREAD_PRIORITY_LOWEST)
int priority();