「強制停止」ボタンの意味は何ですか?


26

にアクセスするSettings > Applications > Manage Applications > Downloadedと、アプリケーションリストが表示されます。一部のアプリケーションを選択すると、「強制停止」ボタンがアクティブになりますが、一部のアプリケーションではこのボタンが淡色表示されています。

どういう意味ですか?このボタンを押すとどうなりますか?

このボタンがあるアプリケーションはRunningセクションにリストされていないため、このボタンは実行中のアプリケーションを意味することはできません。

Force stopボタンがアクティブになっているアプリケーションだけをリストしてアンインストールできますか?


Androidバージョン:3.2

回答:


18

pacoの答えに対する私のコメントで述べたように、彼が提供した情報はほとんど正しいです。ほとんどのアプリは、あなたがそれらを去ると完全に終了せず、「ホーム」ボタンからそれを去ってもアプリは終了しません。さらに、一部のアプリには、ユーザーが終了できないバックグラウンドサービスが実行されています。

現在、アプリ(バックグラウンドサービスを含む)を停止する必要がある状況があります。たとえば、そのアプリをアンインストールする場合(または、システムアプリの場合はその更新)。「Force Stop」ボタンがアクティブで、「Uninstall」(または「Remove」)ボタンがグレー表示になっている場合、これに気づきますが、「Force Stop」でアプリを停止すると後者がアクティブになります。(両方のボタンがグレー表示されている場合は、アンインストールできないシステムアプリであることを確認できます)。

Btw:「強制停止」ボタンがグレーアウト(配置すると「淡色表示」)されている場合、アプリが現在実行されておらず、サービスも実行されていないことを意味します(その時点で)。


1
You will notice this when the "Force Stop" button is active, the "Uninstall" (or "Remove") button is grayed out、この動作をしているサンプルアプリを提供できますか?アプリのいくつかをざっと見てみたところ、「強制停止」ボタンと「アンインストール」ボタンの両方がアクティブになっていることがわかりました。私はAndroid 4.4.2を使用しています。
cychoi 14

1
私の答えはすでに2歳なので、当時のキットカットは入手できませんでした。この動作は変更されたか、すべてのアプリに影響を与えていない可能性があります。Kitkatでテストすることはできません(それを実行するデバイスはありません)。
イジー

15

背後にあるコードを強制停止ボタンが複雑で文書化されていないです。私はそれを逐語的に再現してから、一度に1つずつ説明します。

private void checkForceStop() {
    if (mDpm.packageHasActiveAdmins(mPackageInfo.packageName)) {
        // User can't force stop device admin.
        updateForceStopButton(false);
    } else if ((mAppEntry.info.flags&ApplicationInfo.FLAG_STOPPED) == 0) {
        // If the app isn't explicitly stopped, then always show the
        // force stop button.
        updateForceStopButton(true);
    } else {
        Intent intent = new Intent(Intent.ACTION_QUERY_PACKAGE_RESTART,
                Uri.fromParts("package", mAppEntry.info.packageName, null));
        intent.putExtra(Intent.EXTRA_PACKAGES, new String[] { mAppEntry.info.packageName });
        intent.putExtra(Intent.EXTRA_UID, mAppEntry.info.uid);
        intent.putExtra(Intent.EXTRA_USER_HANDLE, UserHandle.getUserId(mAppEntry.info.uid));
        getActivity().sendOrderedBroadcast(intent, null, mCheckKillProcessesReceiver, null,
                Activity.RESULT_CANCELED, null, null);
    }
}

最初のif行では、パッケージのコンポーネントデバイス管理者であるかどうかを確認します(つまり、設定アプリの[ セキュリティ]ページの[ デバイス管理者]リストで確認されている場合)。その場合、ボタンは無効(グレー表示)になっているため、デバイス管理者を停止することはできません。

次に、else ifパッケージがすでに停止しているかどうかを確認します。ここで、停止とは、単に「実行されていない」という意味ではありません。私の知る限り、パッケージはである停止します(そのようなメニューから起動することによってのように)それから、任意のコンポーネントを実行したことがない場合の状態、またはあなたが押した場合は強制停止ボタン(この1かでを「動作停止」ダイアログ)、そのコンポーネントのいずれも再度実行しないでください。パッケージ停止されていない場合、ボタンは有効になっています。

このelseケースは、アプリ停止され、デバイス管理者ではないというまれな事態をカバーしいます。この場合、他のシステムサービスにボタンを有効にする機会を与えます。たとえば、アプリにはアラームが設定されて保留されている場合があります。これにより、後で停止状態からでもアプリが再起動されます。この場合、ボタンは有効になります。他のシステムサービスにボタンを有効にする理由がない場合、無効になります。

概要

強制停止パッケージは、デバイスの管理者でない場合はボタンが有効になっていると、あなたはすでに強制的に停止していないのいずれか、このアプリをしたり、それを力に停止しているが、システムサービスは、それが再びそれを実行します考えています。

アプリが実行されている場合(デバイス管理者ではない場合)、強制停止ボタンは確実に有効になりますが、ボタンが有効であってもアプリが実行されているわけではありません。


ボタンが表示されるかどうかを決定するコードを見せてくれてうれしいです。私のような開発者にとってそれは完璧な答えです。しかし、実際には、これは答えの半分にすぎません。実際にボタンを押したときに何が起こるかは表示されません。
ジョン・パンコウィッツ

2

Androidはメモリ内に4種類のアプリケーションを保持しています。実行中キャッシュされたバックグラウンド以外 はすべて覚えていません...(実行中のタブでハードウェアメニューボタンをクリックしてポップアップオプションを選択すると、キャッシュされたバックグラウンドにアクセスできます)

したがって、実行中のプロセスには表示されないかもしれませんが、完全に死んでいるわけではありません。

ほとんどの場合、キャッシュされたバックグラウンドプロセスにあります。

また、タスクマネージャーについても、アプリを効率的に管理するためにAndroidがハードコード化されているため、それらを使用することはお勧めしません。繰り返します!(そしてアプリは理想的な状態よりも起動時にかなり多くのメモリを消費します)したがって、サイクルになり、バッテリーを消耗します。

そのため、強制終了ボタンは、主に実行中のキャッシュプロセスでアクティブになり、他の2つのタイプのプロセスに存在する非常に少数のアプリに存在する場合があります。

他のアプリではグレー表示されます!


1
4種類以上です(詳細については、Androidアプリケーションとアクティビティのライフサイクルについてをご覧ください)。しかし、これらのクラスは、少なくとも直接ではなく、「強制停止」ボタンとは関係ありません(私の答えを参照しください:アクティブな「強制停止」ボタンは、アプリ自体またはその登録済みサービスのいずれかが現在実行されていることを意味します)。
イジー

-2

このボタンは、デバイスを最後に起動してから実行中または実行中のアプリに対してアクティブです。

Androidは、アプリを終了してもアプリを完全に強制終了することはありません。このボタンはアプリを完全に閉じてスタックから削除し(実行中のアプリ)、このボタンはアプリが使用するメモリを解放します。

実行中のアプリを一覧表示する方法はありません。バックグラウンドで実行中のアプリにもこのボタンがあります。

Playストアには、デバイスのメモリを自動的に管理する無料のキラーアプリがあります。


3
基本的な情報は正しいですが、「自動キラー」に関する部分を削除する方が良いでしょう。(Android 2.xよりも前に)必要な時期があったかもしれませんが、それらは完全に反生産的であり、バッテリーランタイムにほとんど悪影響を及ぼします。
イジー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.