2013-02-20 84 views
0

爲什麼我收到此錯誤,當我打電話服務爲什麼我得到這個服務錯誤?

E/ActivityManager(160): ANR in com.colo 
E/ActivityManager(160): Reason: Executing service com.colo/.services.PmService 
E/ActivityManager(160): Load: 8.41/7.12/6.4 
E/ActivityManager(160): CPU usage from 21836ms to -1ms ago: 
E/ActivityManager(160): 2.2% 160/system_server: 1.3% user + 0.9% kernel/faults: 9 minor 
E/ActivityManager(160): 1.9% 65/bma_wq: 0% user + 1.9% kernel 
E/ActivityManager(160): 1.4% 28646/com.colors.pipemedia: 1.2% user + 0.1% kernel/faults: 285 minor 1 major 
E/ActivityManager(160): 0.5% 27859/com.google.android.apps.maps:NetworkLocationService: 0.4% 
        user + 0% kernel/faults: 280 minor 14 major 
E/ActivityManager(160): 0.3% 18292/com.android.systemui: 0.3% user + 0% kernel/faults: 48 minor 
E/ActivityManager(160): 0% 61/synaptics_wq: 0% user + 0% kernel 
E/ActivityManager(160): 0.1% 144/adbd: 0% user + 0.1% kernel 
E/ActivityManager(160): 0.1% 246/com.android.phone: 0.1% user + 0% kernel/faults: 1 minor 
E/ActivityManager(160): 0% 62/check_ic_wq: 0% user + 0% kernel 
E/ActivityManager(160): 0% 72/kondemand/0: 0% user + 0% kernel 
E/ActivityManager(160): 0% 28602/logcat: 0% user + 0% kernel 
E/ActivityManager(160): 0% 5/events/0: 0% user + 0% kernel 
E/ActivityManager(160): 0% 58/file-storage: 0% user + 0% kernel 
E/ActivityManager(160): 0% 90/rild: 0% user + 0% kernel 
E/ActivityManager(160): 0% 237/com.hu1.wallpaper.forest: 0% user + 0% kernel/faults: 28 minor 
E/ActivityManager(160): 0% 1276/com.google.process.gapps: 0% user + 0% kernel 
E/ActivityManager(160): 0% 25919/flush-138:13: 0% user + 0% kernel 
E/ActivityManager(160): 0% 26459/AR6K Async: 0% user + 0% kernel 
E/ActivityManager(160): 0% 26461/ksdioirqd/mmc1: 0% user + 0% kernel 
E/ActivityManager(160): 0% 26467/wpa_supplicant: 0% user + 0% kernel 
E/ActivityManager(160): 0% 27702/com.wssyncmldm: 0% user + 0% kernel/faults: 9 inor 
E/ActivityManager(160): 0% 28103/com.android.vending: 0% user + 0% kernel/faults: 1 minor 
E/ActivityManager(160): 4.1% TOTAL: 2.8% user + 1.2% kernel 
E/ActivityManager(160): CPU usage from 1156ms to 1691ms later: 
E/ActivityManager(160): 43% 28646/com.colors.pipemedia: 31% user + 12% kernel/ults: 729 minor 2 major 
E/ActivityManager(160):  14% 28649/GC: 12% user + 1.7% kernel 
E/ActivityManager(160):  8.7% 28646/olors.pipemedia: 3.5% user + 5.2% kernel 
E/ActivityManager(160):  5.2% 28652/Compiler: 3.5% user + 1.7% kernel 
E/ActivityManager(160): +0% 28674/Thread-28: 0% user + 0% kernel 
E/ActivityManager(160): +0% 28675/[email protected]: 0% user + 0% kernel 
E/ActivityManager(160): 10% 160/system_server: 3.5% user + 7.1% kernel/faults: 4 minor 
E/ActivityManager(160):  10% 176/ActivityManager: 3.5% user + 7.1% kernel 
E/ActivityManager(160): 0.6% 22/kswapd0: 0% user + 0.6% kernel 
E/ActivityManager(160): 1.8% 65/bma_wq: 0% user + 1.8% kernel 
E/ActivityManager(160): 0.7% 72/kondemand/0: 0% user + 0.7% kernel 
E/ActivityManager(160): 0.8% 26461/ksdioirqd/mmc1: 0% user + 0.8% kernel 
E/ActivityManager(160): 1% 28602/logcat: 1% user + 0% kernel 
E/ActivityManager(160): 83% TOTAL: 35% user + 20% kernel + 26% iowait 
E/(160): Dumpstate > /data/log/dumpstate_app_anr 

我就按一下按鈕呼叫服務是這樣的。按鈕這樣

final Intent pm_intent = new Intent(AccountsActivity.this , PmService.class); 
pm_intent.putExtra("Key", "gtalk service*****"); 
pm_intent.putExtra("user_name", acc.getAcc_Name()); 
pm_intent.putExtra("user_pass", acc.getAcc_Pass());    
Thread t = new Thread(){ 
public void run(){ 
    startService(pm_intent); 
    } 
}; 
t.start(); 

我來控制服務單擊

final Intent gtalk_intent = new Intent(getActivity() , GtalkService.class); 
Thread t = new Thread(){ 
    public void run(){ 
     getActivity().stopService(gtalk_intent); 
    } 
}; 
t.start(); 

回答

5

你得到的ANR,讓你做你的UI線程一些處理器密集型的工作。

我看到您正在使用新的Thread啓動Service。雖然這可能看起來像Service將從新的Thread開始,但它實際上不是。如果要在新線程中運行服務的內容,則必須在服務中創建新的線程,其格式爲onStartCommnand()onCreate()。試着這樣做。

+0

我可以像這樣在線程中調用一個長時間運行的函數。線程t =新主題(){ \t \t \t公共無效的run(){ \t \t \t \t setRosterNConnection(); \t \t \t} \t \t}; \t \t t.start(); – 2013-02-20 13:58:16

+0

您可以在線程中運行代碼,但是如果該代碼也啓動服務,則該服務仍將在主UI線程上啓動。 – 2013-02-20 14:00:53

+0

我投了票,因爲幾個星期以來,我不確定爲什麼我的申請繼續到ANR。我從來不清楚如果我開始一個新線程並調用其中的context.service,它不會產生一個新線程並在主UI線程上被調用。在閱讀這篇文章後,我在onStartCommand中的服務中調用了一個新線程,並且看起來好像解決了我的問題。非常感謝!對你和所有貢獻者! – JenniferG 2016-01-03 19:48:36