每当我启动应用程序时,它都会强制关闭,引用下面的日志。这是CPU过载问题还是内存管理问题?我真的不明白怎么解决这个问题? 非常感谢任何帮助。
我正在运行Eclipse v 3.5.2和Android SDK 0.98以及AVD是Froyo(2.2)
DDMS日志
10-10 23:53:53.379:ERROR / ActivityManager(60):ANR in Test.Tooyoou 10-10 23:53:53.379:ERROR / ActivityManager(60):原因:执行服务Test.Tooyoou / .TooyoouWidget $ UpdateService 10-10 23:53:53.379:ERROR / ActivityManager(60):载荷: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%user + 3%kernel / faults:10 minor 10-10 23:53:53.379:ERROR / ActivityManager(60):Test.Tooyoou:2%= 2%用户+ 0%内核/故障:197次小型4大 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%user + 0%kernel / faults:3016 minor 12 major 10-10 23:53:53.379:ERROR / ActivityManager(60):ndroid.launcher:0%= 0%user + 0%kernel / faults:32 minor 10-10 23:53:53.379:ERROR / ActivityManager(60):m.android.phone:0%= 0%user + 0%kernel / faults:174 minor 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%user + 0%kernel / faults: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
答案 0 :(得分: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
}
}
一旦我使用了线程,一切都像魅力一样,丑陋的错误消失了。可能这对你们中的一些人有帮助。