我开发了一个Android Widget,它运行正常。我添加了一些额外的功能,并推动了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
我已经搜索过了,但是我无法找到任何错误进程的错误,因此我对如何解决它没有任何线索。 重新启动手机(或模拟器)会使错误消失,但这不是我希望用户做的事情。 有人可以帮我解释错误的原因是什么以及如何解决它?
答案 0 :(得分:9)
我刚刚在市场包装前亲自体验过这一点。我按照指南并将android:label =“@ string / app_name”属性添加到我的清单中的应用程序元素...
中提琴!现在适合我!
编辑:匹配评论。
答案 1 :(得分:8)
我遇到了同样的问题,我当前的理论是appWidget崩溃了,当它重新启动时,它有相同的坏持久数据,每次重启时都会崩溃。当这种情况经常发生时,操作系统会“强制停止”appWidget。我的乐队助手是有一个触摸事件,即用户将触摸的“setOnClickPending”(如果有必要,可以通过挫折),并且将在appWidget内部处理并重置appWidget。
答案 2 :(得分:8)
当我的BroadcastReceiver反复泄漏导致系统杀死我的应用程序的异常时发生在我身上。 接下来对接收器的调用将导致“进程坏”日志。
我的解决方案是确保BroadcastReceiver没有异常泄露。
这些是应用程序被杀死时的日志(尝试查找并查找原因):
W/ActivityManager﹕ Process com.company.app has crashed too many times: killing!
I/ActivityManager﹕ Killing proc 9344:com.company.app/u0a10239: crash
答案 3 :(得分:4)
从我的AndroidManifest.xml中删除process is bad
权限后,我在HTC Sensation OS 2.3.4上遇到INTERNET
错误。
W / ActivityManager(253):无法启动应用 MY_DOMAIN.flashback / 10132 for broadcast Intent { act = android.intent.action.PHONE_STATE flg = 0x20000000(有额外内容)}: 过程很糟糕
我仔细尝试了很多不同的解决方法,我发现解决的唯一方法是:
adb install <myapp>
再次安装APK。我想借此机会列出 NOT 为我工作的内容(因为似乎有很多关于如何修复此错误的FUD):
adb kill-server
,然后adb start-server
,重新安装。adb shell
然后ps
,这根本不会显示我的应用运行。我想知道底层问题是否是由于我的应用程序变小了。我认为它曾经解压缩到设备上的flashback-1.apk
和flashback-2.apk
,而现在它只是解压缩到单个flashback-1.apk
。
答案 4 :(得分:2)
我刚收到此错误。
我修复了错误并删除了从OnConnectionReceiver.onReceiver()
调用的一些源代码,也许调用会耗费一些时间。
答案 5 :(得分:2)
我遇到了这个问题。原因是WLAN调用wifi.getConnectionInfo()。getScanResults();可以在某些时段返回null而不是空列表。我在登录logcat几个小时后发现了这个。当应用程序遇到错误并崩溃时,触摸窗口小部件会给我同样的“坏过程”错误,因为意图没有重新打开应用程序,但是它会陷入崩溃状态。猜它就像Android处理崩溃的小部件一样。
答案 6 :(得分:1)
卸载应用程序并重新安装。
当我安装了一个具有相同软件包名称的“测试”应用程序并且在应用程序缓存数据或其他地方弄乱了某些内容时,我收到了此错误。
答案 7 :(得分:0)
我的问题也与XML有关 - 特别是我有一个未指定layout_width和layout_height的TextView元素,因为它们继承了一个不包含它们的样式。我的styles.xml文件没有通过eclipse验证。当我运行应用程序时,我得到了必须指定这些视图的错误 - 当我修复错误时,我收到了process is bad
错误,并且不得不强制退出。
不幸的是我认为维护了一些设置,因此修复后重建应用程序是不够的。我不得不卸载应用程序 - 重新启动手机(以消除持久性数据),当我重新安装时,我从错误中恢复过来。
答案 8 :(得分:0)
有点偏离主题,但在某些Android设备中,人们可以通过编写在UncaughtExceptionHandler
中创建onCreate
以在崩溃后重新启动应用程序的应用程序来重现性地导致此失败,然后执行某些操作导致未处理的异常(抛出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分钟后,操作系统也从未将其杀死。
反复崩溃app的示例代码:
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!");
}
答案 9 :(得分:0)
我遇到了同样的问题。我到了重新启动并重新安装应用程序并没有解决问题的地步。我很沮丧。我从扩展AppWidgetProvider的类中删除了所有内容,并在其中只运行了两个空方法运行应用程序:onUpdate和onReceive。终于解决了这个问题。
也许它不能解决你的问题,但谁知道呢。试一试。
答案 10 :(得分:0)
“进程错误”是由于应用程序(或BroadcastReceiver,Service或其他组件)多次崩溃所致。经过几次这些操作后,系统决定对这种行为感到厌烦,并阻止该过程再次开始。
重新启动将清除崩溃计数,但是也可以通过杀死系统服务器来清除它:
adb shell killall system_server
这将有效地进行“软重启”。我发现它比实际重新启动要快得多。
答案 11 :(得分:0)
这对我有用! 将您的隐式意图更改为显式意图,因为启动Oreo隐式意图不会在后台运行! 因此,基本上,在创建Intent对象时,传入您要启动的类名。 https://developer.android.com/about/versions/oreo/background.html
答案 12 :(得分:-3)
我的项目遇到了同样的问题。我认为值得指出的是,我可以通过从Eclipse中的代码中删除一些新行来神奇地解决这个问题。作为示例,我更改了以下代码,
Intent clickIntent = new Intent(this.getApplicationContext(),
MyWidgetProvider.class);
到
Intent clickIntent = new Intent(this.getApplicationContext(),MyWidgetProvider.class);