問題タブ [android-lifecycle]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
android - Android - アンインストール時にアプリケーションによって作成されたファイルを保持または削除します
ファイルを作成してSDカードに保存するアプリケーションを作成しました。ユーザーがAndroidデバイスでアンインストールを実行したときにすべてのファイルを削除するために、フォルダをアプリケーションにバインドする方法はありますか?
android - Android静的オブジェクトのライフサイクル
イベント検索アプリケーションを作成しています。ある画面から検索条件を設定し、別の画面に入力すると、ユーザーは3番目の画面から検索条件を編集して4番目の画面に移動できます。
上記のタスクを実行するために、アプリケーション周辺の値を記憶する静的オブジェクトを使用しており、特別なことをする必要はありません。
しかし、低メモリがアンドロイドを見つけた場合、アンドロイドの静的オブジェクトのライフサイクルについては、静的オブジェクトを削除するのではないかと心配しています???
androidはマルチタスクをサポートしているため、ユーザーが別のアプリケーションに切り替えて、ユーザーが戻ってきたときにアプリケーションが狂ったように動作し始めた場合、マルチタスク時に静的オブジェクトが削除されますか?何か案が ??また、シングルトンメソッドを介して静的オブジェクトを保持する方が良いアプローチであることをお勧めします???
android - Android で最も「死に強い」コンポーネントは何ですか?
アクティビティから呼び出される AsyncTasks のディスパッチャーとして最適なクラスを探しています。
次のいずれかになると思います。
- Applicationのサブクラス。
- Serviceのサブクラス。
- 私自身の静的なもの。
私にとっては、3番目の選択肢を実装する方が簡単です。しかし問題は、サービスやアプリケーションよりも「死に強い」かどうかです。また、アプリケーションとサービスのどちらが長生きするかは非常に興味深いことです。私の推測では、アプリ (Android の観点からはタスク) プロセスが存続する限り、アプリケーションは存続します。
したがって、基本的には、最も「静的な」ものに依存したいので、「死に強い」品質によってこれらのオプションを分類する必要があります。
アップデート:
当初、この質問は2010 年に (1) Android が開発者にとって新しいプラットフォームであり、(2) Google のドキュメントがアプリ コンポーネントのライフサイクルとアプリ プロセスのライフサイクル全体についてあまりにも曖昧であった (場合によっては誤解を招くものでさえあった) ときに尋ねられました。 .
android - ログアウト時にアクティビティ履歴スタックをクリアし、「戻る」ボタンでログインのみのアクティビティが開かないようにします
アプリケーションのすべてのアクティビティを表示するには、ユーザーがログインする必要があります。ユーザーは、ほぼすべてのアクティビティからログアウトできます。これはアプリケーションの要件です。ユーザーがログアウトした場合はいつでも、ユーザーを Login に送信したいと考えていますActivity
。この時点で、このアクティビティを履歴スタックの一番下に配置して、「戻る」ボタンを押すとユーザーが Android のホーム画面に戻るようにします。
この質問がいくつかの異なる場所に尋ねられたのを見てきましたが、すべて同様の回答が返されました (ここで概説します) が、フィードバックを収集するためにここに提示したいと思います。
Intent
ドキュメントに記載されているようにフラグを設定して Login アクティビティを開こうとしましたFLAG_ACTIVITY_CLEAR_TOP
が、Login アクティビティを履歴スタックの一番下に配置し、ユーザーが戻るのを防ぐという目標を達成できませんでした以前に見たログイン アクティビティに。マニフェストの Login アクティビティにも使用android:launchMode="singleTop"
してみましたが、これも私の目標を達成していません (とにかく効果がないようです)。
履歴スタックをクリアするか、以前に開いたアクティビティをすべて終了する必要があると思います。
1 つのオプションは、各アクティビティのonCreate
ログイン状態をチェックし、ログインしfinish()
ていない場合はチェックすることです。このオプションは好きではありません。戻るボタンは引き続き使用でき、アクティビティが閉じると元に戻るからです。
次のオプションは、どこからでも静的にアクセスできるすべての開いているアクティビティへの参照を維持するLinkedList
ことです (おそらく弱参照を使用します)。ログアウトすると、このリストにアクセスして、以前に開いたすべてのアクティビティを反復処理し、finish()
それぞれを呼び出します。私はおそらくすぐにこの方法を実装し始めるでしょう。
Intent
ただし、これを達成するには、フラグの策略を使用したいと思います。上で概説した 2 つの方法のいずれかを使用しなくても、アプリケーションの要件を満たすことができれば幸いです。
Intent
またはマニフェスト設定を使用してこれを達成する方法はありますか、または私の2番目のオプションはLinkedList
、開いているアクティビティを維持するのが最良のオプションですか? または、私が完全に見落としている別のオプションはありますか?
java - アクティビティの再開時に「スレッドは既に開始されています」
私の状況は次のとおりです: Android 用のゲームを構築しています。私のゲームのアクティビティは、ゲーム ロジックとレンダリング用のスレッドを持つカスタム surfaceView で構成されています。アーキテクチャは、Google の Web サイトの LunarLander デモに似ています。
アクティビティが開始されると、surfaceView が作成され、次のメソッドが呼び出されます。
ホームボタンを押してゲームを終了すると、onPause() メソッドが呼び出され、それが surfaceDestroyed() を呼び出します。surfaceDestroyed では、次のように呼び出してゲーム スレッドを停止します。
アプリは正常にバックグラウンドになります。次に、アイコンを押してアプリを再起動すると、ログに「スレッドは既に開始されています」というメッセージが表示され、画面に「強制終了」ポップアップが表示されます。このメッセージは、レンダー スレッドで start() を呼び出したときに、アクティビティが「surfaceCreated」メソッドに入ったときに発生します。
今、私は何時間も調べましたが、これがなぜなのかわかりません。アプリを閉じるとスレッドが停止していると思うので、スレッドが既に開始されていると表示される理由がわかりません。
android - 2 つのアクティビティでデバイスを回転させるときのプログラム フローの問題
私の最初のアクティビティは、その onCreate 内で 2 番目のアクティビティを作成しています。
2 番目のアクティビティには、ユーザー名とパスワードの EditText ビューと、送信ボタンとキャンセル ボタンがあります。いずれかのボタンが押されると、ユーザー名とパスワードのテキストが (onActivityResult 経由で) アクティビティ 1 に送り返され、サーバーに接続してユーザー名が使用可能かどうかが確認されます。サーバーへの接続中に、showDialog を使用して ProgressDialog を表示します。サーバーが応答すると、ProgressDialog が閉じられ、AlertDialog が表示されます。デバイスが回転しない限り、これは正常に機能します。
ここに問題があります。ユーザーが 2 番目のアクティビティ内からデバイスをローテーションして送信をプッシュすると、最初のアクティビティがその onCreate を再度呼び出し、ユーザー名とパスワードがまだ null であるため、2 番目のアクティビティを再び起動することになります。
これを回避するための提案はありますか?
activity-2 から activity-1 の onCreate にデータを渡すために使用できるメソッドはありますか? この場合、データベースを使用したくありません。
アクティビティ 2 へのサーバー通信とダイアログを含めることを考えましたが、アクティビティ 1 とアクティビティ 2 でサーバー コードが重複することになります (アクティビティ 1 は他の目的でもサーバーに接続します)。このアプローチで発生するもう 1 つの問題は、ユーザーがパスワードの作成をキャンセルするオプションを持っていることです。その場合、アプリを終了させます。アクティビティ 2 から終了を呼び出した場合、アクティビティ 1 が表示され、ユーザー名とパスワードが作成されていない限り、アクティビティ 1 を表示したくありません。
ふと思いついたのですが、アクティビティ 2 をダイアログに置き換えることができれば、物事がより簡単になるかもしれません。ダイアログ ビューには、2 つの EditText と 2 つのボタンが必要です。このようなものを作成して showDialog メソッドを使用できますか? 他のアイデアはありますか?
android - Androidで、アクティビティが再開された理由をどのように検出できますか?
私は、独自の状態管理の一部を実行するアクティビティを開発しています。次のonResumeケースを区別しようとしています。
- 新発売
- タスクスイッチ(ホームボタンロングクリック)
- 同じアプリケーションで他のアクティビティを実行した後に再開する
- 睡眠後の目覚め
- 向きの変更
アクティビティの意図や他の場所で、これらを区別するのに役立つ何かがありますか?
好奇心旺盛でいくつかのコンテキストのために...4と5で内部履歴スタックを保持したいです。ケース2と3では、同じ現在のページを保持しますが、履歴を消去します(通常の戻るボタン機能を許可します。その時点で引き継ぎます)。ケース1は、アクティビティの内部スタートページに初期化されます(onCreateの助けを借りれば、簡単に検出できます)。
android - マニフェストと BroadcastReceiver のプログラムによる登録の主な違い
マニフェストに BroadcastReceiver を登録することと、プログラムで登録することの主な違いを理解しようとしています...
私の理解は基本的に次のとおりです(何か不足している場合は、誰かが私のポイントを修正していただければ幸いです)。
マニフェストに登録:
- OS は、アプリケーションの実行状態に関係なく、必要に応じて魔法のようにクラスを見つけてインスタンス化し、onReceive() メソッドを呼び出します。
- receive はブロードキャストごとに 1 回だけ呼び出されます (つまり、マニフェストに登録することは、ブロードキャストを受信するために「クラス」を登録するようなものであり、ブロードキャストは必要に応じてクラスをインスタンス化します) (??)
プログラムで登録:
- コードで登録するということは、クラスのインスタンスを登録してブロードキャスト メッセージを受信することを意味します (つまり、コードが少しずさんで、何度も登録すると、複数の BroadcastReceiver インスタンスがすべて onReceive() で呼び出されることになります)。放送
- 登録を解除するには、以前に登録した特定の BroadcastReceiver インスタンスを登録解除する必要があります
- アプリケーションが OS によって破棄された場合、 onReceive() メソッドはブロードキャストのために呼び出されません
ありがとう
android - アンドロイド; あるアクティビティで状態を初期化してから、別のアクティビティで状態を更新するにはどうすればよいですか?
2つの活動をしています
最初のものは、コンテンツ プロバイダーからデータを取得して表示します。
2 番目のアクティビティにはボタンがあり、クリックすると、最初のアクティビティを呼び出して「更新」する必要があります。つまり、コンテンツ プロバイダーからデータをリロードします。
初めての活動です
そして、これは私の2番目の活動です
これは、そのような機能を実装する正しい方法ですか? 間違っているように感じますが、主張を裏付ける理由がわかりません
android - android 変な onCreate / onDestroy バランス
何度も何度も作成するのではなく、startActivity() への後続の呼び出しすべてがターゲット アクティビティを再開することを Android に伝える方法はありますか? 回避策はありますか?
ありがとう