私はAndroidウィジェットを開発しましたが、うまく機能していました。私はいくつかの追加機能を追加し、Androidマーケットを通じてアップデートをプッシュしました。今、人々は不平を言っていますそれはもう機能しません。
ログに表示されるエラーは次のとおりです。
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
検索しましたが、プロセスのエラーの意味がどこにも見つからないため、修正方法がわかりません。電話(またはエミュレーター)を再起動すると、エラーは解消されますが、それはユーザーにしてほしいことではありません。エラーの原因と修正方法を誰かに説明してもらえますか?
私は同じ問題を抱えており、私の現在の理論では、appWidgetがクラッシュし、再起動すると、再起動するたびにクラッシュするのと同じ不良永続データがありました。これが頻繁に発生する場合、appWidgetはOSによって「強制停止」されます。私のバンドエイドは、ユーザーが(必要に応じてフラストレーションから)タッチする「setOnClickPending」であるタッチイベントを持ち、appWidgetの内部で処理されてappWidgetをリセットすることです。
私はこれを市場向けに梱包する直前に自分で体験しました。私はガイドラインに従い、Android:label = "@ string/app_name"属性をマニフェストのアプリケーション要素に追加しました...
ビオラ!今私のために働く!
編集:コメントを照合します。
BroadcastReceiverが例外を繰り返しリークしていて、システムがアプリを強制終了したときに私に起こりました。受信者への次の呼び出しは、「プロセスが悪い」ログになります。
私の場合の解決策は、BroadcastReceiverから例外がリークしないようにすることでした。
これらは、アプリが強制終了されたときのログです(それらを探して原因を見つけてください):
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でprocess is bad
エラーが発生しました。
W/ActivityManager(253):ブロードキャストIntent {act = Android.intent.action.PHONE_STATE flg = 0x20000000(extrasがある)}のアプリMY_DOMAIN.flashback/10132を起動できません:プロセスが不良です
さまざまな回避策を注意深く試しましたが、修正する唯一の方法は次のとおりです。
adb install <myapp>
を使用してAPKを再インストールします。私はこの機会に何をしたかをリストしたいと思います[〜#〜] not [〜#〜]私にとってはうまくいきました(このエラーを修正する方法について多くのFUDがあるようです):
adb kill-server
を使用し、次にadb start-server
を使用して再インストールします。adb Shell
を実行し、次にps
を実行すると、アプリがまったく実行されていません。根本的な問題の原因は、アプリのサイズが小さくなったことにあるのでしょうか。デバイスではflashback-1.apk
とflashback-2.apk
に展開されていたと思いますが、現在は単一のflashback-1.apk
にのみ展開されています。
このエラーが発生するだけです。エラーを修正し、OnConnectionReceiver.onReceiver()
から呼び出しているソースコードをいくつか削除します。呼び出しには時間がかかる可能性があります。
私はこの問題に直面しました。その理由は、WLANがwifi.getConnectionInfo()。getScanResults();を呼び出すことでした。場合によっては、空のリストではなくnullを返すことがありました。 logcatを数時間ログに記録した後、これを見つけました。アプリケーションでエラーが発生してクラッシュした場合、ウィジェットをタッチすると、ここで言及したのと同じ「不正なプロセス」エラーが表示されます。これは、インテントがアプリを再開しなかったため、クラッシュした状態で動かなくなったためです。 Androidがクラッシュしたウィジェットを処理する方法と同じように推測します。
私は私のように私の問題を修正しました:
アプリケーションをアンインストールして、再度インストールします。
「テスト」アプリケーションを同じパッケージ名でインストールし、アプリのキャッシュデータまたはどこかに混乱をきたしたときに、このエラーが発生しました。
私にとっての問題はXMLにも関係していました。具体的には、それらが含まれていないスタイルを継承していたため、layout_widthとlayout_heightを指定していないTextView要素がありました。私のstyles.xmlファイルは、Eclipseによってこれについて検証されませんでした。アプリを実行したときに、これらのビューを指定する必要があるというエラーが発生しました。エラーを修正すると、process is bad
エラー。強制終了する必要がありました。
残念ながら、一部の設定は維持されていたため、修正後にアプリを再構築するだけでは不十分でした。アプリをアンインストールする必要があり、電話を再起動して(somの永続的なデータを削除するため)、再インストールするとエラーから回復しました。
これは私のために働いた! Oreoの暗黙のインテントの開始はバックグラウンドで実行されないため、暗黙のインテントを明示のインテントに変更してください!したがって、基本的にはIntentオブジェクトを作成するときに、開始するクラス名を渡します。 https://developer.Android.com/about/versions/oreo/background.html
私も同じ問題を抱えていました。アプリケーションを再起動して再インストールしても問題が解決しなかった。欲求不満でした。 AppWidgetProviderを拡張したクラスからすべてを削除し、2つの空のメソッド(onUpdateとonReceive)だけでアプリケーションを実行しました。最後に問題を解決しました。
多分それはあなたのものを解決しないでしょう、しかし誰が知っています。試してみる。
ややトピックから外れていますが、一部のAndroidデバイスでは、UncaughtExceptionHandler
にonCreate
を作成するアプリを作成して、アプリを再起動することで、このエラーを再現可能に引き起こすことができますクラッシュし、未処理の例外を発生させるために何かを実行します(RuntimeException
をスローするか、NullPointerException
を発生させる何かを実行します)いくつかのサンプルコードを以下に示します。
Samsung Galaxy Tab 2とVerizon Ellipsis 7の2つのデバイスでこれを試しました。タブ2では、Eclipseからアプリを実行しているときに問題が発生することはありませんでした。殺される。代わりに、アプリをapkにエクスポートし、adb経由でインストールし、アプリを起動し、4-8がクラッシュして再起動した後、Androidは上記のエラーメッセージでアプリを強制終了しました(Process com.buggy.app has crashed too many times: killing!
)。
Ellipsis 7では、この問題を再現することはできませんでした。バグのあるアプリは繰り返しクラッシュして再起動し、OSはこの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!");
}
「プロセスが悪い」は、アプリ(またはBroadcastReceiver、サービス、またはその他のコンポーネント)の複数のクラッシュが原因です。これらのいくつかの後、システムはその動作にうんざりしていると判断し、プロセスが再開しないようにします。
再起動するとクラッシュカウントがクリアされますが、システムサーバーを強制終了することでもクリアできます。
adb Shell killall system_server
これにより、「ソフトリブート」が効果的に行われます。実際の再起動よりもはるかに高速です。
同様の問題に直面しました。コードを調べてみたところ、原因はデフォルト値にあることがわかりました。デフォルト値が論理的で正であることを確認します。たとえば、特定の間隔で開始するバックグラウンドサービスがある場合は、同じに設定したデフォルト値が適切であることを確認します。