web-dev-qa-db-ja.com

Androidウィジェットの「プロセスが悪い」エラーを修正する方法は?

私は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 

検索しましたが、プロセスのエラーの意味がどこにも見つからないため、修正方法がわかりません。電話(またはエミュレーター)を再起動すると、エラーは解消されますが、それはユーザーにしてほしいことではありません。エラーの原因と修正方法を誰かに説明してもらえますか?

47
wligtenberg

私は同じ問題を抱えており、私の現在の理論では、appWidgetがクラッシュし、再起動すると、再起動するたびにクラッシュするのと同じ不良永続データがありました。これが頻繁に発生する場合、appWidgetはOSによって「強制停止」されます。私のバンドエイドは、ユーザーが(必要に応じてフラストレーションから)タッチする「setOnClickPending」であるタッチイベントを持ち、appWidgetの内部で処理されてappWidgetをリセットすることです。

8
mobibob

私はこれを市場向けに梱包する直前に自分で体験しました。私はガイドラインに従い、Android:label = "@ string/app_name"属性をマニフェストのアプリケーション要素に追加しました...

  1. アプリをアンインストールする
  2. 電話/エミュレータを再起動します
  3. この属性なしで新しいアプリをプッシュする

ビオラ!今私のために働く!

編集:コメントを照合します。

9
NPike

BroadcastReceiverが例外を繰り返しリークしていて、システムがアプリを強制終了したときに私に起こりました。受信者への次の呼び出しは、「プロセスが悪い」ログになります。

私の場合の解決策は、BroadcastReceiverから例外がリークしないようにすることでした。

これらは、アプリが強制終了されたときのログです(それらを探して原因を見つけてください):

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

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を起動できません:プロセスが不良です

さまざまな回避策を注意深く試しましたが、修正する唯一の方法は次のとおりです。

  • [設定]-> [アプリケーション]からアプリをアンインストールします。
  • 携帯電話からバッテリーを取り外します(Android「電源を切る」メニューを使用したnot機能を使用)。
  • デバイスを再びオンにします。
  • adb install <myapp>を使用してAPKを再インストールします。

私はこの機会に何をしたかをリストしたいと思います[〜#〜] not [〜#〜]私にとってはうまくいきました(このエラーを修正する方法について多くのFUDがあるようです):

  • アプリをアンインストールし、Android電話メニュー(ボタンを押し続けて[電源を切る]を選択)を使用して再起動し、再度オンにして再インストールします。
  • アンインストールしてadb kill-serverを使用し、次にadb start-serverを使用して再インストールします。
  • アンインストールしてadb Shellを実行し、次にpsを実行すると、アプリがまったく実行されていません。
  • アンインストールし、Eclipseでクリーンビルドを実行して、再インストールします。

根本的な問題の原因は、アプリのサイズが小さくなったことにあるのでしょうか。デバイスではflashback-1.apkflashback-2.apkに展開されていたと思いますが、現在は単一のflashback-1.apkにのみ展開されています。

4
Dan J

このエラーが発生するだけです。エラーを修正し、OnConnectionReceiver.onReceiver()から呼び出しているソースコードをいくつか削除します。呼び出しには時間がかかる可能性があります。

2
tsinyun

私はこの問題に直面しました。その理由は、WLANがwifi.getConnectionInfo()。getScanResults();を呼び出すことでした。場合によっては、空のリストではなくnullを返すことがありました。 logcatを数時間ログに記録した後、これを見つけました。アプリケーションでエラーが発生してクラッシュした場合、ウィジェットをタッチすると、ここで言及したのと同じ「不正なプロセス」エラーが表示されます。これは、インテントがアプリを再開しなかったため、クラッシュした状態で動かなくなったためです。 Androidがクラッシュしたウィジェットを処理する方法と同じように推測します。

2
Jacob L

私は私のように私の問題を修正しました:

アプリケーションをアンインストールして、再度インストールします。

「テスト」アプリケーションを同じパッケージ名でインストールし、アプリのキャッシュデータまたはどこかに混乱をきたしたときに、このエラーが発生しました。

1
Record413123

私にとっての問題はXMLにも関係していました。具体的には、それらが含まれていないスタイルを継承していたため、layout_widthとlayout_heightを指定していないTextView要素がありました。私のstyles.xmlファイルは、Eclipseによってこれについて検証されませんでした。アプリを実行したときに、これらのビューを指定する必要があるというエラーが発生しました。エラーを修正すると、process is badエラー。強制終了する必要がありました。

残念ながら、一部の設定は維持されていたため、修正後にアプリを再構築するだけでは不十分でした。アプリをアンインストールする必要があり、電話を再起動して(somの永続的なデータを削除するため)、再インストールするとエラーから回復しました。

0
bbengfort

これは私のために働いた! Oreoの暗黙のインテントの開始はバックグラウンドで実行されないため、暗黙のインテントを明示のインテントに変更してください!したがって、基本的にはIntentオブジェクトを作成するときに、開始するクラス名を渡します。 https://developer.Android.com/about/versions/oreo/background.html

0
sorry_I_wont

私も同じ問題を抱えていました。アプリケーションを再起動して再インストールしても問題が解決しなかった。欲求不満でした。 AppWidgetProviderを拡張したクラスからすべてを削除し、2つの空のメソッド(onUpdateとonReceive)だけでアプリケーションを実行しました。最後に問題を解決しました。

多分それはあなたのものを解決しないでしょう、しかし誰が知っています。試してみる。

0
Mitulát báti

ややトピックから外れていますが、一部のAndroidデバイスでは、UncaughtExceptionHandleronCreateを作成するアプリを作成して、アプリを再起動することで、このエラーを再現可能に引き起こすことができますクラッシュし、未処理の例外を発生させるために何かを実行します(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!");
}
0
abeboparebop

「プロセスが悪い」は、アプリ(またはBroadcastReceiver、サービス、またはその他のコンポーネント)の複数のクラッシュが原因です。これらのいくつかの後、システムはその動作にうんざりしていると判断し、プロセスが再開しないようにします。

再起動するとクラッシュカウントがクリアされますが、システムサーバーを強制終了することでもクリアできます。

adb Shell killall system_server

これにより、「ソフトリブート」が効果的に行われます。実際の再起動よりもはるかに高速です。

0
Allen Luce

同様の問題に直面しました。コードを調べてみたところ、原因はデフォルト値にあることがわかりました。デフォルト値が論理的で正であることを確認します。たとえば、特定の間隔で開始するバックグラウンドサービスがある場合は、同じに設定したデフォルト値が適切であることを確認します。

0
diptia