如何解决一个Android Widget的“过程是坏的”错误?

我开发了一个Android Widget,并且工作正常。 我添加了一些额外的function,并通过Android Market推送更新。 现在人们抱怨说它不工作了。

我在日志中看到的错误是:

07-14 10:33:44.016: WARN/ActivityManager(78): Unable to launch app ... for broadcast Intent { act=android.appwidget.action.APPWIDGET_ENABLED cmp=... }: process is bad 07-14 10:33:44.026: WARN/ActivityManager(78): finishReceiver called but none active 07-14 10:33:44.026: WARN/ActivityManager(78): Unable to launch app ... for broadcast Intent { act=android.appwidget.action.APPWIDGET_UPDATE cmp=... (has extras) }: process is bad 07-14 10:33:44.036: WARN/ActivityManager(78): finishReceiver called but none active 

我已经search,但我找不到任何地方的过程是错误的手段,所以我不知道如何解决它。 重新启动手机(或模拟器)会使错误消失,但是,这不是我希望用户执行的操作。 有人能帮我解释错误的原因是什么以及如何解决?

我有同样的问题,我目前的理论是,appWidget崩溃,当它重新启动它有相同的不良持久性数据,使其崩溃,每次重新启动。 当这种情况经常发生时,appWidget被操作系统“强制停止”。 我的乐队帮助是有一个触摸事件,即“setOnClickPending”,用户将触摸(如果有必要的挫折),这将在appWidget内部处理,并重置appWidget。

我刚在包装市场之前就亲身经历了这个。 我正在遵循指导方针,并在我的清单中的应用程序元素中添加了android:label =“@ string / app_name”属性…

  1. 卸载您的应用程序
  2. 重新启动手机/模拟器
  3. 推送新的应用程序没有此属性

中提琴! 现在为我工作!

编辑:匹配评论。

当我的BroadcastReceiver屡次泄漏导致系统杀死我的应用的exception时,发生在我身上。 接下来的调用将导致“进程是坏的”日志。

在我的情况下,解决scheme是确保没有exception从BroadcastReceiver泄漏。

这些是应用程序被杀害的日志(尝试寻找并find原因):

 W/ActivityManager﹕ Process com.company.app has crashed too many times: killing! I/ActivityManager﹕ Killing proc 9344:com.company.app/u0a10239: crash 

从我的AndroidManifest.xml中删除了INTERNET权限之后,我在HTC Sensation OS 2.3.4上遇到了一个错误。

W / ActivityManager(253):无法启动应用程序MY_DOMAIN.flashback / 10132广播Intent {act = android.intent.action.PHONE_STATE flg = 0x20000000(有额外)}:进程是坏的

我仔细地尝试了很多不同的解决方法,我发现唯一的解决方法是:

  • 通过设置 – >应用程序卸载应用程序。
  • 从手机中取出电池(使用Android的“关机”菜单不起作用)。
  • 重新打开设备。
  • 再次使用adb install <myapp>安装APK。

我想借此机会列出什么适合我(因为有很多关于如何解决这个错误的FUD):

  • 卸载应用程序,使用Android手机菜单重新启动(按住button并select“closures”),再次打开,重新安装。
  • 卸载,使用adb kill-server ,然后adb start-server ,重新安装。
  • 卸载,运行adb shell然后ps ,这并没有显示我的应用程序运行。
  • 卸载,在Eclipse中做一个干净的生成,重新安装。

我不知道这个问题是由我的应用程序变小造成的。 我认为它用来解压到设备上的flashback-1.apkflashback-2.apk ,而现在只能解压到一个flashback-1.apk

我只是得到这个错误。 我修复了错误,并删除了从OnConnectionReceiver.onReceiver()调用的一些源代码,也许调用将花费一些时间。

我面临这个问题。 原因是WLAN调用wifi.getConnectionInfo()。getScanResults(); 在某些情况下可能会返回null而不是空列表。 logginglogcat几个小时后我发现了这个。 当应用程序遇到错误并崩溃时,对小部件的触摸会给我提供与此处提到的相同的“错误进程”错误,因为意图没有重新打开该应用程序,但它陷入崩溃状态。 猜测它只是Android处理崩溃的小部件的方式。

我得到了像这样修复:

卸载应用程序并重新安装。

我得到这个错误时,我安装了一个“testing”应用程序具有相同的软件包名称,并在应用程序caching数据或其他地方搞砸了一些东西。

我面临类似的问题。 当我通过我的代码,我意识到这是罪魁祸首的默认值。 确保您的默认值是合乎逻辑的并且是正值。例如,如果您有一个以特定间隔开始的后台服务,请确保您为此设置的默认值是合适的。

对于我来说,这个问题也和XML有关 – 特别是我有一个没有指定layout_width和layout_height的TextView元素,因为他们inheritance了一个没有包含它们的样式。 我的styles.xml文件没有通过eclipsevalidation。 当我运行应用程序,我得到的错误,这些意见必须指定 – 当我修复错误,我收到的process is bad错误,并不得不强制退出。

不幸的是,我认为有些设置是保留的,所以修复后重build应用程序是不够的。 我不得不卸载应用程序 – 重新启动手机(以消除索姆永久数据),当我重新安装我从错误中恢复。

有些偏离主题,但是在某些Android设备中,通过编写一个在onCreate创build一个UncaughtExceptionHandler的应用程序,可以在重新启动应用程序之后重新启动应用程序,然后执行一些操作来引发未处理的exception(抛出RuntimeException或做一些导致NullPointerException事情,或者其他)。 下面给出一些示例代码。

我已经在两个设备上尝试过了:三星Galaxy Tab 2和Verizon Ellipsis 7.使用Tab 2,当我从Eclipse运行应用程序时,无法解决问题 – 它会重复崩溃并重新启动被杀害 相反,我不得不导出应用程序到apk,通过adb安装,启动应用程序,并在4-8崩溃并重新启动后,Android会杀死应用程序与上面的错误消息( Process com.buggy.app has crashed too many times: killing! )。

用省略号7,我从来没有能够重现这个问题。 越野车的应用程序会反复崩溃并重新启动,即使10分钟后,操作系统也不会杀死它。

示例代码反复崩溃的应用程序:

 public void onCreate(Bundle savedInstanceState) { mContext = this.getApplicationContext(); UncaughtExceptionHandler uehandler = new Thread.UncaughtExceptionHandler() { @Override public void uncaughtException(Thread thread, Throwable ex) { // restart app after 100 milliseconds PendingIntent myActivity = PendingIntent.getActivity(mContext, 0, new Intent(mContext, MyActivity.class), PendingIntent.FLAG_ONE_SHOT); AlarmManager alarmManager = (AlarmManager) mContext.getSystemService(Context.ALARM_SERVICE); alarmManager.set(AlarmManager.RTC, System.currentTimeMillis() + 100, myActivity); System.exit(2); // re-throw critical exception further to the os (important) Thread.getDefaultUncaughtExceptionHandler().uncaughtException(thread, ex); } }; Thread.setDefaultUncaughtExceptionHandler(uehandler); throw new RuntimeException("Crash the app!"); } 

我有同样的问题。 我得到了重新启动和重新安装应用程序没有解决问题的一点。 我感到沮丧。 我从扩展AppWidgetProvider的类中删除了所有的东西,然后只用两个空方法运行应用程序:onUpdate和onReceive。 终于解决了这个问题。

也许这不会解决你的,但谁知道。 试一试。

我和我的项目有同样的问题。 我认为值得指出的是,我可以通过在Eclipse中删除一些新的代码来修复这个问题。 作为一个例子,我改变了下面的代码,

 Intent clickIntent = new Intent(this.getApplicationContext(), MyWidgetProvider.class); 

 Intent clickIntent = new Intent(this.getApplicationContext(),MyWidgetProvider.class);