2010-10-11 51 views
0

無論何時我啓動應用程序,它都會保持強制關閉引用下面的日誌。這是CPU超載問題還是內存管理問題?我真的不明白如何解決這個問題? 任何幫助,非常感謝。錯誤/ ActivityManager(60)有人在Android模擬器上遇到過這個問題嗎?

我運行Eclipse v 3.5.2和Android SDK 0.98和AVD是升級Froyo(2.2)

DDMS登錄

10-10 23:53:53.379:ERROR/ActivityManager(60):ANR在Test.Tooyoou 10-10 23:53:53.379:錯誤/ ActivityManager(60):原因:執行服務Test.Tooyoou/.TooyoouWidget $ UpdateService 10-10 23:53:53.379:ERROR/ActivityManager(60): Load:1.17/0.68/0.26 10-10 23:53:53.379:ERROR/ActivityManager(60):CPU使用率從20436ms到33ms前: 10-10 23:53:53.379:ERROR/ActivityManager(60):adbd :3%= 0%用戶+ 3%內核/故障: 10輕微 10-10 23:53:53.379:ERROR/ActivityManager(60):Test.Tooyoou:2%= 2%user + 0%kernel/faults:197 minor 4 major 10-10 23:53:53.379: ERROR/ActivityManager(60):system_server:2%= 1%user + 0%kernel/faults:134 minor 2 major 10-10 23:53:53.379:ERROR/ActivityManager(60):ndroid.settings:1%= 1%用戶+ 0%內核/故障:3016次要12主要 10-10 23:53:53.379:錯誤/ ActivityManager(60):ndroid.launcher:0%= 0%用戶+ 0%內核/故障:32次要 10-10 23:53:53.379:錯誤/ ActivityManager(60):m.android.phone:0%= 0%用戶+ 0%內核/故障:174次 10-10 23:53:53.379:ERROR/ActivityManager(60):ronsoft.openwnn:0%= 0%user + 0%kernel/faults:99 minor 10-10 23:53:53.379:ERROR/ActivityManager(60):d.process.media:0%= 0%用戶+ 0%內核/ fa ults:22 minor 10-10 23:53:53.379:ERROR/ActivityManager(60):netd:0%= 0%user + 0%kernel/faults:64 minor 1 major 10-10 23:53:53.379: ERROR/ActivityManager(60):com.svox.pico:0%= 0%user + 0%kernel/faults:26 minor 10-10 23:53:53.379:ERROR/ActivityManager(60):+ sh:0% = 0%user + 0%kernel 10-10 23:53:53.379:ERROR/ActivityManager(60):+ logcat:0%= 0%user + 0%kernel 10-10 23:53:53.379:ERROR/ActivityManager(60):TOTAL:11%= 5%用戶+ 4%內核+ 0%irq + 0%softirq

回答

1

好人我認爲我解決了這個非常醜陋的錯誤背後的問題。 BroadcastReceiver TimeOut和小部件的更新服務有一些問題需要花費很長時間。在這裏,我是如何解決它的。

我沒有爲AppWidget使用服務做所有事情,而是創建了一個線程來完成所有關鍵更新工作。

public static class UpdateService extends Service { 
     Thread widgetUpdateThread; 
     @Override 
     public void onStart(Intent intent, int startId) { 

     widgetUpdateThread = new Thread(){ 
      public void run(){ 
       RemoteViews updateViews = 
             buildUpdate(getApplicationContext()); 
          ComponentName thisWidget = new 
           ComponentName(getApplicationContext(), 
                 TooyoouWidget.class); 
       AppWidgetManager manager = 
         AppWidgetManager.getInstance(getApplicationContext()); 
         manager.updateAppWidget(thisWidget, updateViews); 

      } 
     }; 
     widgetUpdateThread.start(); 
    } 

    @Override 
    public void onDestroy(){ 
     widgetUpdateThread.interrupt(); 
     super.onDestroy(); 
    } 

    public RemoteViews buildUpdate(Context context) { 
    //your code to create the Remoteviews update 

}

}

一旦我使用的線程,一切就像一個魅力和醜陋的錯誤消失。可能會對你們中的一些人有幫助。