実行中のプログラムを停止するオプションが見つかりません(デバッグモードかリリースモードか)。
そのため、今のところ、エミュレーターを閉じるだけでプログラムを停止(Eclipseに制御を戻す)します。
これを行うより良い方法はありますか?エミュレータを閉じて再起動する必要がないように?
実行中のプログラムを停止するオプションが見つかりません(デバッグモードかリリースモードか)。
そのため、今のところ、エミュレーターを閉じるだけでプログラムを停止(Eclipseに制御を戻す)します。
これを行うより良い方法はありますか?エミュレータを閉じて再起動する必要がないように?
回答:
エミュレータでアプリを停止したいとのことでした。これを行うには、(デバッグパースペクティブで)デバイスウィンドウを開き、プロセスを選択してから、同じウィンドウの停止ボタンを押します。
RemoteException sending setActive(false) notification
は強制終了さ
プログラムを停止するためにパースペクティブを切り替えるのが面倒だと思う人(私がしたように)を選択すると、現在のパースペクティブにデバイスウィンドウを表示できます
ウィンドウ > ビューの表示 > その他... > Android > デバイス
Androidでは、プログラムは通常、メモリが必要な場合に、finish()またはシステムがプログラムを破棄した場合にのみ「停止」することに注意してください。なぜ停止するのですか?たとえば、修正/再インストール/再テストのために停止する必要はありません。
「デバッグ」パースペクティブで、「デバッグ」の下のアプリケーションのルート(アクティブスレッドのリストがある場所)を選択し、停止ボタンをクリックします。
この答えはEclipseを扱っていませんが、この質問は実行中のAndroidプログラムを停止するためのGoogle検索で出てくるので、コマンドラインメソッドを提供したいと思います。実行してadb shell
、強制終了するプロセスのPIDを見つけます。ps
たとえば、次のようにしました。
u0_a46 2097 37 175520 19912 ffffffff 40037ebc S net.unternet.bleah.blarg
そうkill 2097
すれば、メイン画面が再び表示されるはずです。
図1-この回答の調査中に多くのゾンビが殺された
OSレベルでAndroidアプリケーションのJava VMプロセスを強制終了することはお勧めしません。残念ながら、これは、System.exit()やシェルの「kill」コマンドと同様に、Eclipseデバイスウィンドウの「停止」とまったく同じです。
これは、onStop()、onDestroy()、finalize()などの通常のアプリのライフサイクルメソッドを覆します。
多くのアプリは、正常に終了するためにこれらのメソッドを必要とします(たとえば、センサー、MediaPlayer、イコライザー、ビジュアライザーなどのシステムオブジェクトを使用する場合)。
これらのライフサイクルメソッドの実行中にrelease()が明示的に呼び出されない場合、これらのシステムオブジェクトはシステムリソースのゾンビデスグリップと共にたむろします。図を参照してください。上記1。これにより、アプリの再起動が妨げられ、再起動が必要になる場合さえあります。それが不名誉な側面です。
唯一の解決策は、onStop()またはonDestroy()を呼び出すか、少なくともfinalize()を呼び出して、常にアプリをきれいに終了することです。デバッガーは、シャットダウン時のOSと同様にこれを行います。
コマンドラインから適切な終了を強制するために、SIG_HUPイベントをトラップするようにアプリを設定できます。
アプリVMを強制終了するのは、ANR(すでにゾンビ)状態にあるときだけです。ANRは修正する必要があります。この状態になる可能性のあるアプリをデプロイしないでください。それは非常に失礼です。
GoogleアナリティクスとPlayストアを使用して、これらの展開を監視できます。ゾンビアプリケーションが原因で、怒っているユーザーが再起動後にシングルスターのANRレビューを投稿することは望ましくありません。ひどい。
AndroidはLinuxであることを忘れないでください。実際のOSのように扱い、アプリのライフサイクルを尊重してください。そうでなければ、恐ろしいゾンビの黙示録に直面することになります。
PS:ゾンビのアナロジーが気に入らない場合、ファンタジアはどうですか?
画像を参照してください。1. DDMSをクリックします。2.現在のアプリを選択します。3. [停止]をクリックします