2015-11-02 5 views
20

観測:Androidアプリケーションのアクセス許可を手動で変更すると、このアプリケーションのすべてのプロセスが強制終了されました。Androidのmarshmallow動的パーミッションの変更によりすべてのアプリケーションプロセスが終了する

手順:[設定] - > [アプリケーション]を選択し、[アプリケーションとアクセス権]を選択します。いずれかのアクセス許可を無効にします。 端末:Android Marshmallow 6.0を実行しているNexus 6端末

ランチャーからアプリケーションを起動したとき、このアプリケーションの許可が変更される前に起動していました。これは、UIマルチタスクメニューからアプリケーションをスワイプしてアプリケーションプロセスを終了するときとは異なる動作です。その場合、ランチャーアクティビティが最初に作成されます。 つまり、権限を変更して起動したときにアプリケーションが正しく動作するためには、起動するランチャーアクティビティに依存することはできません。

すべてのAndroid 6.0以降のデバイスでこの動的なアクセス許可が適用されますか? UIマルチタスクメニューからアプリケーションプロセスをスワイプすることによってアプリケーションプロセスが強制終了されるときと、動作が異なるのはなぜですか?

+0

この問題を処理した場合、その方法を説明できますか? – MiloRambaldi

答えて

12

つまり、許可を変更して起動したときにアプリケーションが正しく動作するためには、起動するランチャーアクティビティに依存することはできません。

これは長年にわたり行われてきました。たとえば、メモリの状態が悪いためにプロセスが終了したが、ユーザーが最近30分以内にその状態になった場合、ユーザーが概要画面にアクセスしたとき(「UIマルチタスクメニュー ")、あなたのアプリに戻ると、コントロールはユーザーが最後に行った(つまり、BACKスタックの上にあった)何らかのアクティビティの新しいインスタンスに戻ります。

すべてのAndroid 6.0以降のデバイスでこの動的なアクセス許可が適用されますか?

はい。また、以前のすべてのAndroidデバイスでは、プロセスが終了してもタスクがまだ未処理かつ最近のものである場合の動作が期待されます。

UIマルチタスクメニューからアプリケーションプロセスをスワイプして殺すと、動作が異なるのはなぜですか?

概要画面からタスクをスワイプすると、そのタスクが削除されます。そのため、ユーザーがアプリに戻ることを試みると(ホームスクリーンランチャーアイコンなど)、そのタスクを再利用することはできません。

+4

権限を変更したままにしておく理由を理解できません。なぜプロセスを殺してタスクを削除しないのですか?アプリで必要なすべての権限をチェックする必要がありますが、少なくとも1つのエントリポイントでリクエストすることができます(少なくとも重要なもの)。権限変更後に新しいタスクを強制する方法があるかどうかを知っていますか?私は様々なアクティビティ設定を混在させようとしましたが、うまくいかなかったのです... – tbruyelle

+6

@tbruyelle: "権限変更後に新しいタスクを強制する方法があるかどうか知っていますか?" - 権限の変更に固有のものは何もありません。それ以外の場合は、onCreate()の上位にアクセス権があるかどうか(たぶん一般的なアクティビティベースクラスを介して)をチェックしてください。重要なものが見つからない場合は、 'Intent 'フラグを使用してタスクをクリアするので、' requestPermissions() 'コールは集中的に処理されます。 – CommonsWare

+0

このようなものを設計してくれてありがとう、私は行くでしょう。 – tbruyelle

1

私は殺害の根拠が次の通りだと考えます。それは並行性に関するものです。システムは次の3つの方法のいずれかを選択できます。

  1. 許可をサイレントに取り消すには。アプリはこれに対してチェックする方法がありません。なぜなら、「チェック」と「使用」の間にまだ取り消しが起こるからです。

  2. アプリに通知する。この種の通知は、アプリケーションによって承認されなければなりません。つまり、スレッドが無効になったAPIにもうアクセスすることはなく、システムはAPIをオフにすることがあります。これは優雅ですが、経験の浅いプログラマーにとっては難しいです。

  3. アプリを終了するには、次回の起動時にその権限が取り消されたことを正しく認識します。

関連する問題