android優先順序
① Android線程優先順序和進程oom_adj
在處理app啟動速度的時候,可以設置主線程的優先順序,保證主線程佔用的cpu足夠久。進程的oom_adj,決定了當內存不夠的時候,lmk會根據oom_adj的大小依次釋放內存。
android中對線程等級劃分如下:
設置線程的優先順序分為:android 提供的api和java sdk自帶的api
注意: 要使用android提供的api設置,用java提供的作用不夠顯著
作用: 可以在主線程設置主線層等級;在Glide載入圖片的時候設置低優先順序。當圖片量很大的時候可以降低載入圖片線程的等級
android內存不夠了,會觸發oom機制,lowMemoryKiller會根據每個進程的oom_adj的等級,依次殺死進程,釋放內存。
lom會根據free的內存的值,來判斷kill掉哪個等級下的進程。例如當空閑內存只有64M了。會kill掉oom_adj 為12-15的進程
真實案例:應用A跳到第三方應用B,在第三方應用B中播放視頻,載入大量圖片,導致返回的時候,應用A走了SplashActivity。通過logcat發現A應用被kill掉了
② Android提升服務進程優先順序
在android應用開發時,我們經常會在後台開一個service,來處理一些業務操作。最近公司的一個項目就是,通過service不斷地和硬體設備交互,獲取數據,在頁面長時間停留在一個頁面時,手機的屏幕會出項鎖屏的狀況,這時,我們的應用的優先順序就會下降,很多次,等打開屏幕的瞬間,我發現原來的原來的進程被殺死了,應用又回到了首頁,尤其是在Android高版本的系統中尤為突出。所以下面我們通過提成優先順序的方式,來進行進程保活
2.在程序開始的地方注冊這個廣播接收者
4.定義這個activity的style屬性 value - style.xml 文件
5.Androidmanifest文件中注冊這個activity
大功告成!
經過測試,本人的華為榮耀9i,原來存在的問題被解決了,希望大家能互相交流經驗。
③ android中的進程優先順序,說法錯誤的是
在Android中進程按優先順序可以分為五類,優先順序從高到低排列:
1.前台進程 該進程包含正在與用戶進行交互的界面組件,比如一個Activity。
2.可視進程 該進程中的組件雖然沒有和用戶交互,但是仍然可以被看到。
3.服務進程 該進程包含在執行後台操作的服務組件,比如播放音樂的Service。
4.後台進程 該進程包含的組件沒有與用戶交互,用戶也看不到 Service。
5.空進程 沒有任何界面組件、服務組件,或觸發器組件。
④ android怎麼提高線程的優先順序
線程調度 計算機通常只有一個CPU,在任意時刻只能執行一條機器指令,每個線程只有獲得CPU的使用權才能執行指令.所謂多線程的並發運行,其實是指從宏觀上看,各個線程輪流獲得CPU的使用權,分別執行各自的任務.在運行池中,會有多個處於就緒狀態的線程在等待CPU,JAVA虛擬機的一項任務就是負責線程的調度,線程調度是指按照特定機制為多個線程分配CPU的使用權. 有兩種調度模型:分時調度模型和搶占式調度模型。 分時調度模型是指讓所有的線程輪流獲得cpu的使用權,並且平均分配每個線程佔用的CPU的時間片這個也比較好理解。 java虛擬機採用搶占式調度模型,是指優先讓可運行池中優先順序高的線程佔用CPU,如果可運行池中的線程優先順序相同,那麼就隨機選擇一個線程,使其佔用CPU。處於運行狀態的線程會一直運行,直至它不得不放棄CPU。 一個線程會因為以下原因而放棄CPU。 1 java虛擬機讓當前線程暫時放棄CPU,轉到就緒狀態,使其它線程或者運行機會。 2 當前線程因為某些原因而進入阻塞狀態 3 線程結束運行 需要注意的是,線程的調度不是跨平台的,它 不僅僅取決於java虛擬機,還依賴於操作系統。在某些操作系統中,只要運行中的線程沒有遇到阻塞,就不會放棄CPU;在某些操作系統中,即使線程沒有遇到阻塞,也會運行一段時間後放棄CPU,給其它線程運行的機會。 java的線程調度是不分時的,同時啟動多個線程後,不能保證各個線程輪流獲得均等的CPU時間片。 如果希望明確地讓一個線程給另外一個線程運行的機會,可以採取以下辦法之一。 調整各個線程的優先順序 讓處於運行狀態的線程調用Thread.sleep()方法 讓處於運行狀態的線程調用Thread.yield()方法 讓處於運行狀態的線程調用另一個線程的join()方法
⑤ Android 進程管理篇(五)-調度策略與優先順序
接上篇cpuset,這篇來看看進程優先順序與調度策略管理。
linux中,優先順序號一共有0-139,其中0-99的是RT(實時)進程,100-139的是非實時進程。
數字越低優先順序越高。
SCHED_IDLE idle狀態低優先順序進程調度
先看Process中調度策略的劃分,與上面介紹的一樣。
首先在AMS中封裝了FIFO和NORMAL的兩個策略,NORMAL好說,看看FIFO在哪用到
這里Process.setThreadScheler並沒有太多的應用,我們直接來看優先順序設置吧。else中將top app的UI線程與render線程都設置為TOP_APP_PRIORITY_BOOST優先順序,nice值為-10,非常高。
這里主要調用androidSetThreadPriority方法
這里通過set_sched_policy來調整調度策略,並通過setpriority設置進程優先順序。這里不特意區分進程與線程了,反正在linux中都是進程。
這里與前面的cpuset非常相似,依然是寫節點,節點前面也提了就是:
那麼這里又引入了一個schedtune子系統,簡單介紹下:
schedtune是ARM/Linaro為了EAS新增的一個子系統,主要用來控制進程調度選擇CPU以及boost觸發。通過權重來分配CPU負載能力來實現快速運行。高權重意味著會享受到更好的cpu負載來處理對應的任務,換句話說你能享受相對更好的cpu運行性能。
簡單梳理下schedtune和不同類型SchedPolicy之間的對應關系:
看下具體文件夾內容:
系統配置:
這里/dev/stune相關配置只做了這么一個
⑥ android進程分為哪5種優先順序順序是怎樣的
Andrid
5個進程及重要優先順序前台進程>可見進程>服務進程>後台進程>空進程,
它們的回收優先順序則反之
⑦ android開發如何將進程放到優先順序最高
有幾種方法可供參考:
方法1: 提高進程優先順序 startForeground(1, new Notification()); 降低進程優先順序 stopForeground(true);
onStart() 方法中進行提高優先順序操作,然後在onStop()方法中進行降低優先順序操作
這個方法可以將對應AP的ADJ臨時提高到2。
方法2:
找到這個進程對應的AndroidMannifest.xml文件,在其中添加屬性『android:persistent="true"』, 這樣可以將該進程設置為常駐內存進程,就可以降低被Kill的概率。以Acore進程為例, 在 /package/providers/ContactsProvider/AndroidMannifest.xml 文件中增加一行『android:persistent="true"』
具體修改示例如下:
<application android:process="android.process.acore" android:label="@string/app_label"
android:icon="@drawable/app_icon"
android:allowBackup="false"
android:persistent="true"
> 方法3:
在需要提高優先順序的地方調用:
final Intent it = new Intent();
it.setAction("android.intent.action.BOOST_DOWNLOADING");
it.putExtra("package_name", "com.android.contacts");
it.putExtra("enabled", true);
context.sendBroadcast(it);
在需要恢復到正常優先順序時調用:
final Intent it = new Intent();
it.setAction("android.intent.action.BOOST_DOWNLOADING");
it.putExtra("package_name", "com.android.contacts");
it.putExtra("enabled", false);
context.sendBroadcast(it);
onStart() 方法中進行提高優先順序操作,然後在onStop()方法中進行降低優先順序操作
這個方法可以將對應AP的ADJ臨時提高到7。
⑧ Android 設置線程優先順序
點此查看原文
priority :【-20, 19】,高優先順序 -> 低優先順序。
priority :【1, 10】,低優先順序 -> 高優先順序。
測試後發現,使用方法一(android.os.Process.setThreadPriority )設置優先順序,對線程調度影響顯著。
⑨ Android資源標簽屬性及優先順序(一)
在寫前一篇文章 淺述Android Apk打包流程 的時候發現解壓後的apk里res的資源文件,有多於我本地項目中的res資源文件夾。
如果我的項目中依賴了Android的一些庫,比如design庫,design裡面有自己的res,那麼在打包我的項目的時候,這些res會合並一起打包。
我查看了下,我確實依賴了design等庫。
對比一下前三張圖,我本地項目沒有建anim、anim-v21、animator-v21(不再截圖了)等資源文件夾,但是design庫有,最終一並打包到我的項目中。
res目錄下的文件夾是有命名規則的,不能隨便起,為的是要適配不同的設備,而且是要做到最佳的資源匹配。
2.1、資源標簽屬性及優先順序
除了解析度外,同種資源之間可以有下面許多資源屬性標簽,它們在匹配過程中是有優先順序順序的。大家可以快速瀏覽一下即可。以下資源標簽修飾語按照優先順序從高到低的順序排列。
3、Locale(語言和區域)
例如en表示英語,fr表示法語,en-rUS表示英語和美國地區。不區分大小寫,r用於區分區域碼。
4、Layout Direction(布局方向)
ldrtl,布局方向從右到左(阿拉伯語等會這樣布局);ldltr,布局方向從左到右,是默認的隱式值。(這就解答了我前面第二個提的問題了)
5、Smallest Screen Width(最小寬度)
sw<N>dp,屏幕的基本尺寸。
sw320dp:適用於320 320 ldpi、320 480 mdpi、480 480 hdpi
sw600dp:適用於600 1024mdpi (7英寸的平板電腦)
sw720dp:適用於720*1280 mdpi (10英寸平板電腦)
當你的屏幕的絕對寬度大於600dp時,屏幕就會自動調用layout-sw600dp文件夾裡面的布局。這里的絕對寬度是指手機的實際寬度,即與手機是否橫屏沒關系,也就是手機較小的邊的長度。
6、Screen Width(屏幕寬度)
w<N>dp ,設備的可用寬度值隨著當前是橫屏還是豎屏會產生變化,即它表示的是當前真實的寬度值。即當手機豎屏時,為較小邊的長度;當手機橫屏時,為較長邊的長度。
7、Screen Height(屏幕高度)
h<N>dp,與lScreen Width的使用一樣,只是這里指的是相對的高度。指手機相對放置的高度;即當手機豎屏時,為較長邊的長度;當手機橫屏時,為較小邊的長度。
8、Size(屏幕大小)
samll:低密度,最小布局尺寸為320 426dp
normal:中等密度,標准屏幕最小布局尺寸約為320 470dp
large:中等密度,大屏幕最小布局尺寸為480 640dp
xlarge:大於中等密度,最小布局尺寸為720 960dp。基本用於平板電腦。
該配置並不僅適用於指定設備,如果沒有匹配的資源,會選擇與之最近的。 如果所有資源均大於當前屏幕的尺寸限定符,則系統不會使用這些資源,且應用運行時會崩潰。
9、Ratio(屏幕縱橫比)
long:寬屏
notlong:非寬屏
10、Orientation(屏幕方向)
port:豎向的
land:橫向的
square:正方形的(我也不知道這個是什麼樣子的)
11、UI Mode(UI模式)
無、car、desk、 television、appliance、 watch6種模式。(其實我沒看明白是幹嘛的,哈哈)
12、Night Mode(夜間模式)
night:夜間模式
notnight:非夜間模式
可以通過UiModeManager來開啟和關閉這一功能。
13、Density(屏幕像素密度)
ldpi:低密度,約120dpi;mdpi:中等密度,160dpi;hdpi:高密度,240dpi;xhdpi:超高密度,320dpi;xxhdpi:超超高密度,480dpi;xxxhdpi:超超超高密度,640dpi;nodpi:不希望以匹配設備密度的點陣圖資源;tvdpi:主要用於電視,約213dpi。anydpi:適用於所有密度,優先順序高於其他限定符。
14、Touch Screen(觸摸屏)
notouch:設備不帶觸摸屏
stylus:觸摸屏通過手寫筆操作
finger:觸摸屏通過手指操作
15、Keyboard(鍵盤可用性)
keysexposed:設備有可用鍵盤。如果當前的軟鍵盤被啟用,那麼即便設備沒有鍵盤或者鍵盤不可用,這個狀態仍可能有效。
keyshidden:設備有鍵盤,但當前被隱藏,而且沒有軟鍵盤啟用。
keyssoft:設備當前軟鍵盤啟動,即便它處於可見或不可見狀態。
16、Text Input(文本輸入法)
nokeys:設備不帶用用於文本輸入的按鍵
qwerty:設備具有標准硬鍵盤(無論是否對用戶可見)
12key:設備具有 12 鍵硬鍵盤(無論是否對用戶可見)
17、Navigation State(定位鍵可用性)
描述定位鍵是否可用,指的是游標定位,非GPS導航的定位。
navexposed:定位鍵對用戶可用
navhidden:定位鍵對用戶不可用
18、Navigation Method(主要的非觸摸屏定位方式)
nonav:設備除了觸摸屏外沒有其他定位方式
dpad:設備具有用於導航的方向鍵
trackball:設備具有用於導航的軌跡球
wheel:設備有方向滾輪用於定位,不常用
19、Dimension(尺寸)
20、Version(平台版本)
設備支持的 API 級別。例如v4 對應於 API 級別 4,帶有 Android 1.6 或更高版本系統的設備。
2.2、怎麼在AS中創建這些文件夾呢?
⑩ Android乙太網和wifi共存並設置Wif優先順序最高
1.ip route show //顯示路由
2.ip rule list //顯示路由表規則優先順序
3.ip route flush cache //刷新路由緩存
4.ifconfig usb0 down 關閉usb0網路介面
5.ifconfig usb0 up 打開usb0網路介面
此時只是wif和乙太網能共存,但是這個時候由於乙太網的優先順序比,wif優先順序高,因此我們需要改動 EthernetNetworkFactory 的NETWORK_SCORE小於60即可,還需要將WifiStateMachine的優先順序設置為Integer.MAX_VALUE,這樣確保wif的優先順序為最高