1. android anr 下面是拋出的異常 怎麼辦
1:UI線程盡量只做跟UI相關的工作
2:耗時的工作(比如資料庫操作,I/O,連接網路或者別的有可能阻礙UI線程的操作)把它放入單獨的線程處理
3:盡量用Handler來處理UIthread和別的thread之間的交互
如何調查並解決ANR
1:首先分析log
2: 從trace.txt文件查看調用stack.
3: 看代碼
4:仔細查看ANR的成因(iowait?block?memoryleak?)
分析ANR
先看個LOG:
04-01 13:12:11.572 I/InputDispatcher( 220): Application is not responding:Window{2b263310com.android.email/com.android.email.activity.SplitScreenActivitypaused=false}. 5009.8ms since event, 5009.5ms since waitstarted
04-0113:12:11.572 I/WindowManager( 220): Input event dispatching timedout sending tocom.android.email/com.android.email.activity.SplitScreenActivity
04-01 13:12:14.123 I/Process( 220): Sending signal. PID: 21404 SIG: 3---發生ANR的時間和生成trace.txt的時間
04-01 13:12:14.123 I/dalvikvm(21404):threadid=4: reacting to signal 3
……
04-0113:12:15.872 E/ActivityManager( 220): ANR in com.android.email(com.android.email/.activity.SplitScreenActivity)
04-0113:12:15.872 E/ActivityManager( 220): Reason:keyDispatchingTimedOut
04-0113:12:15.872 E/ActivityManager( 220): Load: 8.68 / 8.37 / 8.53
04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 4361ms to 699ms ago ----CPU在ANR發生前的使用情況
04-0113:12:15.872 E/ActivityManager( 220): 5.5%21404/com.android.email: 1.3% user + 4.1% kernel / faults: 10 minor
04-0113:12:15.872 E/ActivityManager( 220): 4.3%220/system_server: 2.7% user + 1.5% kernel / faults: 11 minor 2 major
04-0113:12:15.872 E/ActivityManager( 220): 0.9%52/spi_qsd.0: 0% user + 0.9% kernel
04-0113:12:15.872 E/ActivityManager( 220): 0.5%65/irq/170-cyttsp-: 0% user + 0.5% kernel
04-0113:12:15.872 E/ActivityManager( 220): 0.5%296/com.android.systemui: 0.5% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 100%TOTAL: 4.8% user + 7.6% kernel + 87% iowait
04-0113:12:15.872 E/ActivityManager( 220): CPUusage from 3697ms to 4223ms later:-- ANR後CPU的使用量
04-0113:12:15.872 E/ActivityManager( 220): 25%21404/com.android.email: 25% user + 0% kernel / faults: 191 minor
04-0113:12:15.872 E/ActivityManager( 220): 16% 21603/__eas(par.hakan: 16% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 7.2% 21406/GC: 7.2% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 1.8% 21409/Compiler: 1.8% user + 0% kernel
04-0113:12:15.872 E/ActivityManager( 220): 5.5%220/system_server: 0% user + 5.5% kernel / faults: 1 minor
04-0113:12:15.872 E/ActivityManager( 220): 5.5% 263/InputDispatcher: 0% user + 5.5% kernel
04-0113:12:15.872 E/ActivityManager( 220): 32%TOTAL: 28% user + 3.7% kernel
從LOG可以看出ANR的類型,CPU的使用情況,如果CPU使用量接近100%,說明當前設備很忙,有可能是CPU飢餓導致了ANR
如果CPU使用量很少,說明主線程被BLOCK了
如果IOwait很高,說明ANR有可能是主線程在進行I/O操作造成的
除了看LOG,解決ANR還得需要trace.txt文件,
如何獲取呢?可以用如下命令獲取
$chmod 777 /data/anr
$rm /data/anr/traces.txt
$ps
$kill -3 PID
adbpull data/anr/traces.txt ./mytraces.txt
從trace.txt文件,看到最多的是如下的信息:
-----pid 21404 at 2011-04-01 13:12:14 -----
Cmdline: com.android.email
DALVIK THREADS:
(mutexes: tll=0tsl=0 tscl=0 ghl=0 hwl=0 hwll=0)
"main" prio=5 tid=1NATIVE
| group="main" sCount=1 dsCount=0obj=0x2aad2248 self=0xcf70
| sysTid=21404 nice=0 sched=0/0cgrp=[fopen-error:2] handle=1876218976
atandroid.os.MessageQueue.nativePollOnce(Native Method)
atandroid.os.MessageQueue.next(MessageQueue.java:119)
atandroid.os.Looper.loop(Looper.java:110)
at android.app.ActivityThread.main(ActivityThread.java:3688)
at java.lang.reflect.Method.invokeNative(Native Method)
atjava.lang.reflect.Method.invoke(Method.java:507)
atcom.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:866)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:624)
at dalvik.system.NativeStart.main(Native Method)
說明主線程在等待下條消息進入消息隊列
2. 安卓系統顯示CPU使用情況里的數據都是什麼意思財富值不是問題!好的再加!
綠色代表普通優先順序的進程,藍色代表低優先順序的進程。紅色是系統進程。
這是機鋒論壇的原解釋:這是Linux/Android 系統的CPU 負載表示方式,
三個數字代表在三個不同間隔下(1, 5, 15分鍾)估算的平均負載(load average)
數字下面顯示的就是正在運行的各種進程,包括系統和應用程序的執行序(process)。
一般都是看後面的兩個數字,了解系統是否會有長時間處在高負載的狀況下,
短暫、突發的高負載並不會造成問題,可忽略不管。
數字越小越好,數字較大就表示機器過載或有某種問題。
單核CPU ,全負載是1.0 ,超過1.0 就表示有執行序在排隊等待。
雙核CPU ,全負載是2.0 ,因為它可以同時運行兩串執行序。
如想要進一步了解,可用Android Show CPU Usage 找看看。
三星、華為等機子顯示的數字也許代表不同的用途和意義?
或許就跟一些app 顯示CPU, memory, I/O的負載一樣。
順便提一下,數字行和各個執行序都會有藍、綠、紅色的底色條,
數字行的底色條是所有執行序的底色條的總和。
* 藍色呈現的是低優先度的執行序
* 綠色呈現的是一般優先度的執行序
* 紅色呈現的是系統內核的執行序
3. 安卓手機CPU佔用率總是很高怎麼解決
你的安卓手機CPU使用率高可能有以下幾個原因:
1、手機固件有缺陷,導致CPU使用率始終過高,這時您刷一個穩定點的ROM就好了。
2、開啟了過多的程序,這時您可以使用進程管理程序清理一下後台進程。
3、某個程序由於設計不當或者不兼容導致佔用大量CPU資源,這時您可以使用360手機安全衛士體檢里的運行監測(只勾選這個)查看當前所有正在運行程序的CPU佔用,找到消耗資源特別多的,結束或者卸載它。
4、您執行的某一個操作可能導致CPU過高(有時候也可能是查看CPU佔用這個操作)。
5、CPU使用率查看軟體不準確,這時您可以用多個軟體查看。
4. 有什麼手機軟體能查看每個軟體的cpu使用率安卓的
。。直接下載一個CPU-z小工具App,安裝運行就可顯示CPU的參數及運行狀態,其它硬體也有參數也有。
5. android有沒有什麼工具可以實時測試CPU使用率最好能懸浮窗顯示的那種。
android有工具可以實時測試CPU使用率,可以使用Spotlight on window這個軟體。
CPU使用率其實就是運行的程序佔用的CPU資源,表示機器在某個時間點的運行程序的情況。使用率越高,說明機器在這個時間上運行了很多程序,反之較少。使用率的高低與CPU強弱有直接關系。
CPU使用率高的原因有很多,但是一般都是由於病毒木馬或開機啟動項過多所致。高CPU使用率也可能表明應用程序的調整或設計不良。優化應用程序可以降低CPU的使用率。
6. 就運行一個android模擬器,cpu使用率100%
Android模擬器在PC端上跑,有兩大流派Bluestacks和Virutalbox。B原理是把Android底層API介面翻譯成Windows
API,對硬體兼容性沒有需求,而且吃CPU較低。而V是Windows內核底層直接插入驅動模塊,創建一個完整虛擬的電腦環境運行安卓系統,這樣性能會相較於B有極大的提升,加上VT技術,會對CPU有非常高的要求。
所以,如果你的CPU在運行Android模擬器時候過載,那麼你應該是使用的V系的Android模擬器,非常吃CPU,而且如果占存100%,那麼現在絕大多數的B系的模擬器也不跑不起來的,如果連Android模擬器跑不起來,你改考慮換換CPU了。
你也可以發你的配置上來,看看是不是硬體原因。
7. Android怎樣獲取CPU使用率
直接按DEL+CTRL+ALT鍵,調出電腦任務管理器,查看性能,就可以看到有CPU佔用率,核心數佔用率的顯示。
或者安裝常見的魯大師軟體,在溫度欄下,也可以直接看到CPU的佔用率。