タグ付けされた質問 「android-lifecycle」

システムからコンポーネントに転送されるイベントに関する、Androidアプリケーションのライフタイム中の質問。ほとんどのコンポーネントには、特定のライフサイクルが課されています。このタグは、単独で使用するためのものではありません。[android-activity]、[android-service]、および[android-broadcastreceiver]タグとともに使用します。



18
ログアウト時にアクティビティ履歴スタックをクリアし、「戻る」ボタンでログイン済みのみのアクティビティを開けないようにする
アプリケーションのすべてのアクティビティで、ユーザーが表示するにはログインする必要があります。ユーザーはほとんどすべてのアクティビティからログアウトできます。これはアプリケーションの要件です。ユーザーがログアウトした場合はいつでも、ユーザーをLoginに送信しますActivity。この時点で、このアクティビティを履歴スタックの一番下にして、「戻る」ボタンを押すとユーザーがAndroidのホーム画面に戻るようにしたいと思います。 この質問がいくつかの異なる場所で質問され、すべて同じような回答で回答されているのを見てきました(ここで概要を説明します)が、フィードバックを収集するためにここでポーズをとりたいと思います。 ドキュメントに概要が示されIntentてFLAG_ACTIVITY_CLEAR_TOPいるようにフラグを設定してログインアクティビティを開こうとしましたが、ログインアクティビティを履歴スタックの最下部に配置し、ユーザーが戻るのを防ぐという私の目標を達成していません以前に表示されたログインアクティビティに。android:launchMode="singleTop"マニフェストのLoginアクティビティにも使用しようとしましたが、これも私の目的を達成しません(とにかく効果がないようです)。 履歴スタックをクリアするか、以前に開いたアクティビティをすべて完了する必要があると思います。 1つのオプションは、各アクティビティのonCreateログインステータスをチェックし、ログインしてfinish()いない場合はチェックすることです。私はこのオプションが好きではありません。アクティビティが閉じたときに戻るボタンが引き続き使用できるためです。 次のオプションはLinkedList、どこからでも静的にアクセスできる(おそらく弱い参照を使用する)すべての開いているアクティビティへの参照を維持することです。ログアウト時にこのリストにアクセスして、以前に開いたすべてのアクティビティを繰り返しfinish()、それぞれのアクティビティを呼び出します。私はおそらくすぐにこのメソッドの実装を開始します。 Intentしかし、私はこれを達成するためにいくつかのフラグトリックを使用したいと思います。上で概説した2つの方法のいずれかを使用しなくても、アプリケーションの要件を満たすことができると私は嬉しく思います。 Intentまたはマニフェスト設定を使用してこれを達成する方法はありますか、または私の2番目のオプションは、LinkedList開いているアクティビティを維持することが最良のオプションですか?または、私が完全に見落としている別のオプションはありますか?

9
アプリが再開するのではなく再起動する
うまくいけば、解決策ではないにしても、少なくとも行動の説明を誰かが私に理解してくれることを願っています。 問題: 一部のデバイスでは、ランチャーアイコンを押すと現在のタスクが再開されます。その他のデバイスでは、初期起動インテントが起動されます(効果的にアプリを再起動します)。なぜこれが起こるのですか? 詳細: 「ランチャーアイコン」を押すと、アプリが正常に起動します。つまり、最初の名前でActivityアクションandroid.intent.action.MAINとカテゴリを指定してインテントが起動されますandroid.intent.category.LAUNCHER。ただし、常にそうであるとは限りません。 ほとんどのデバイスでは、アプリが既に実行されている後にランチャーアイコンを押すと、そのプロセスで現在実行中のアクティビティが再開されます(最初のアクティビティではありませんActivity)。OSメニューの「最近のタスク」から選択した場合と同じように再開します。これは、すべてのデバイスで必要な動作です。 ただし、選択した他のデバイスでは、異なる動作が発生します。 Motorola Xoomでは、ランチャーアイコンを押すと、現在実行中の内容に関係なく、アプリは常に最初の起動を開始しActivityます。ランチャーアイコンは常に「LAUNCHER」インテントを開始すると思います。 サムスンタブ2で、ランチャーアイコンを押すと、アプリをインストールしたばかりの場合、常にイニシャルActivity(Xoomと同じ)が起動しますが、インストール後にデバイスを再起動すると、ランチャーアイコンが代わりに起動しますアプリを再開します。これらのデバイスは、ランチャーアイコンが実行中のタスクを正しく再開できるようにする、デバイスの起動時に「インストール済みアプリ」をルックアップテーブルに追加すると思いますか? 私はそれを多くの答えを読んだ音私の問題に似ていますが、単に追加android:alwaysRetainTaskState="true"または使用するlaunchMode="singleTop"にはActivity答えていません。 編集: このアプリの最新の起動後、最初の再起動後にすべてのデバイスでこの動作が発生し始めていることがわかりました。気が狂っているように思えますが、再起動プロセスを調べても、実際には何が問題なのかを見つけることができません。

8
1つのアクティビティと他のすべてのフラグメント[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 6年前休業。 この質問を改善する 私は1画面の実装を考えていますActivityし、他のすべてのsreens Fragmentsとmanaging all the fragments thru the activity。 それは良い考えですか?私の答えは「いいえ」ですが、それでもこの考えについてもっと明確に知りたいのです。 アイデアの長所と短所は何ですか? 注意: フラグメントとアクティビティのリンクを教えないでください。 編集: これはフラグメントとアクティビティに関するものです: 長所: フラグメントは、サブアクティビティとしてのアクティビティで使用されることを意図しています。 フラグメントはアクティビティの代わりにはなりません。 フラグメントは再利用性を目的としています(再利用性を実現する方法を知る必要があります)。 フラグメントは、タブレットと電話の両方をサポートするコードを作成するための最良の方法です。 短所: フラグメントからデータを取得するには、インターフェースを実装する必要があります。 対話については、それを示すのに長い道のりが必要です。 タブレットを考慮しない場合、なぜフラグメントを使用する必要があるのですか?アクティビティとフラグメントの開始時間の違いは何ですか?

12
インクリメンタルアノテーション処理要求された警告を取り除く方法は?
私はAndroid開発を使用し始め、Roomライブラリを使用しようとしています。昨日から私はこの警告メッセージに直面しています w:[kapt]インクリメンタルアノテーション処理が要求されましたが、次のプロセッサはインクリメンタルではないため、サポートは無効になっています:androidx.lifecycle.LifecycleProcessor(NON_INCREMENTAL)、androidx.room.RoomProcessor(NON_INCREMENTAL)。 私は調査して修正しようとしましたが、このエラーを回避できないのは、私のgrale.buildファイルです。私が間違っていることを提案/アドバイスしてください。 apply plugin: 'com.android.application' apply plugin: 'kotlin-android' apply plugin: 'kotlin-android-extensions' apply plugin: 'kotlin-kapt' android { compileSdkVersion 29 buildToolsVersion "29.0.2" defaultConfig { applicationId "ps.room.bookkeeper" minSdkVersion 15 targetSdkVersion 29 versionCode 1 versionName "1.0" testInstrumentationRunner "androidx.test.runner.AndroidJUnitRunner" javaCompileOptions { annotationProcessorOptions { arguments = ["room.schemaLocation":"$projectDir/schemas".toString()] } } buildTypes { release { minifyEnabled false …

8
Android ActivitesのonPause()とonStop()の違いは何ですか?
android doc here http://developer.android.com/reference/android/app/Activity.htmlから、「アクティビティがフォアグラウンドに入りました」が呼び出されonPause()、「アクティビティが表示されなくなりました」が呼び出されると述べましたonStop()。 「アクティビティが前面に表示される」と「アクティビティが表示されなくなる」は同じではありませんか?それらの違いは何ですか?

11
java.lang.IllegalStateException:アクティビティにフラグメントがアタッチされていません
API呼び出しの実行中にこのエラーが発生することはほとんどありません。 java.lang.IllegalStateException: Fragment not attached to Activity isAdded()メソッド内にコードを入れて、フラグメントが現在そのアクティビティに追加されているかどうかを確認しようとしましたが、このエラーが発生することはほとんどありません。このエラーが引き続き発生する理由を理解できません。どうすれば防止できますか? ライン上のそのエラーの表示 cameraInfo.setId(getResources().getString(R.string.camera_id)); 以下は私が作っているサンプルAPI呼び出しです。 SAPI.getInfo(getActivity(), new APIResponseListener() { @Override public void onResponse(Object response) { cameraInfo = new SInfo(); if(isAdded()) { cameraInfo.setId(getResources().getString(R.string.camera_id)); cameraInfo.setName(getResources().getString(R.string.camera_name)); cameraInfo.setColor(getResources().getString(R.string.camera_color)); cameraInfo.setEnabled(true); } } @Override public void onError(VolleyError error) { mProgressDialog.setVisibility(View.GONE); if (error instanceof NoConnectionError) { String errormsg = getResources().getString(R.string.no_internet_error_msg); Toast.makeText(getActivity(), …

6
アプリがバックグラウンドになったときにAndroidがスクリーンショットを撮らないようにするにはどうすればよいですか?
現在作成しているアプリには、セキュリティ上の理由から、アプリがバックグラウンドにプッシュされるときにOSがアプリのスクリーンショットを撮らないようにする必要があるという要件があります。これにより、アプリを切り替えるときに最後にアクティブだった画面を表示できなくなります。 この機能をアプリケーションクラスのonPauseメソッドに組み込む予定ですが、最初にこの機能を実現する方法を見つける必要があります。 それで、これを修正する方法の手掛かりを持つ誰かがいますか?

6
ビューではなくAndroidでフラグメントを使用する利点は何ですか?
のために開発するとき Androidに、ターゲット(または最小)SDKを4(API 1.6)に設定し、Android互換パッケージ(v4)を追加して、のサポートを追加できFragmentsます。昨日私はこれを行いFragments、カスタムクラスからのデータを視覚化するために正常に実装しました。 私の質問はこれです:Fragments単にカスタムオブジェクトからビューを取得してAPI 1.5をサポートするのではなく、を使用する利点は何ですか? たとえば、クラスFoo.javaがあるとします。 public class Foo extends Fragment { /** Title of the Foo object*/ private String title; /** A description of Foo */ private String message; /** Create a new Foo * @param title * @param message */ public Foo(String title, String message) { this.title = …

5
onSaveInstanceState()およびonRestoreInstanceState()が正確に呼び出されるのはいつですか?
次の図(公式ドキュメントから)は、Androidアクティビティのよく知られたライフサイクルを示しています。 一方、アクティビティがシステムによって破棄されると(たとえば、メモリを解放する必要があるため)、次の図に示すように、メソッドのおよびを使用してアクティビティの状態が自動的に保存および復元されることがあります(また、公式ドキュメントから):onSaveInstanceState()onRestoreInstanceState() アクティビティが破棄されようとしているときに常に呼び出されるとonSaveInstanceState()は限らないことを知っています。たとえば、ユーザーが「戻る」ボタンを押したために破棄された場合、アクティビティの状態は保持されません。しかし、状態が保存および復元され、onSaveInstanceState()/ onRestoreInstanceState()が呼び出された場合、正確にいつ呼び出されますか? 例えば、上記の図によれば、onRestoreInstanceState()前と呼ばれるかもしれないonStart()、または後にonStart()しかしの前onResume()、または後にonResume()。同様に、にはいくつかの可能性がありonSaveInstanceState()ます。それで、彼らはいつ正確に呼ばれますか? 理想的には、アクティビティのライフサイクルの状態と、存在する場合は保存/復元の方法を示す図を組み合わせて見たいと思います。

4
Android静的オブジェクトのライフサイクル
私はイベント検索アプリケーションを作成しています。ある画面から検索条件を設定し、別の画面に入力してから、ユーザーは3番目の画面から検索条件を編集して4番目の画面に移動します。 上記のタスクを達成するために、アプリケーション周辺の値を記憶する静的オブジェクトを使用しており、特別なことをする必要はありません。 しかし、メモリ不足のアンドロイドが静的オブジェクトを削除した場合、アンドロイドの静的オブジェクトのライフサイクルについて心配ですか? androidはマルチタスクをサポートしているため、ユーザーが別のアプリケーションに切り替えて、ユーザーがアプリケーションに戻ったときに動作がおかしくなり、静的オブジェクトがマルチタスクで削除されますか??? 何か案が ??また、シングルトンメソッドを介して静的オブジェクトを保持することをお勧めしますか?

7
onPause、onStop、onDestroyメソッドでスーパークラスメソッドを呼び出す正しい順序は何ですか?なぜ?
私はAndroidデベロッパーサイトを閲覧して、アクティビティライフサイクルを更新していました。各コード例では、スーパークラスメソッドの横に「常に最初にスーパークラスメソッドを呼び出す」というコメントがあります。 これは、作成の半サイクル(onCreate、onStart、onResume)では理にかなっていますが、破壊の半サイクルでの正しい手順について少し混乱しています:onPause、onStop、onDestroy。 インスタンス固有のリソースを破棄する前に、インスタンス固有のリソースを破棄する前に、インスタンス固有のリソースが依存する可能性のあるスーパークラスのリソースを破棄するのは理にかなっていますが、コメントはそうではありません。何が欠けていますか? 編集:質問の意図について人々が混乱しているように見えるので、私が知りたいのは次のうちどれが正しいのですか?なぜ ? 1.Googleが提案する @Override protected void onStop() { super.onStop(); // Always call the superclass method first //my implementation here } 2.その他の方法 @Override protected void onStop() { //my implementation here super.onStop(); }

8
onResume()の使い方は?
onResume()Androidで使用する例を教えてもらえますか? また、別の実行の終了時にアクティビティを再開したい場合、どのメソッドが実行されますか?onCreate()またはonResume()? そして、データを更新したい場合、どのようにそれを入れるのですか? onResume()?

3
:getView()がnullの場合、つまりonCreateView()の前またはonDestroyView()の後では、フラグメントビューのLifecycleOwnerにアクセスできません。
アプリケーションのすべてのネットワーク呼び出しと応答処理にライブデータを使用しています。 シナリオの1つでは、私のリサイクラービューがビューホルダーのデータをロードonBindし、応答がUIを更新しています。そのためにはlifecycleOwner、オブザーバーにを提供する必要があります。 リサイクラービューには独自のライフサイクルオーナーがないため、親フラグメントを使用して使用してparentFragment.viewlifecycleOwnerいますが、どういうわけかエラーが発生します。 親フラグメントにインスタンスがない場合、ビューホルダーはどのようにインスタンスを持つことができますか? viewModel.responseState.observe(parentFragment.viewLifecycleOwner, Observer { updateUI(it) }) 致命的な例外:java.lang.IllegalStateException:getView()がnullの場合、つまりonCreateView()の前またはonDestroyView()の後では、フラグメントビューのLifecycleOwnerにアクセスできません。
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.