問題タブ [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 - AdMob に関連する onResume の NullPointerException ですが、理由はわかりません
アプリケーションの次のコードで nullpointer 例外が発生します。
この問題を再現できません。エミュレーター、Galaxy S2 デバイス、ZTE ブレードの両方でアプリのすべての機能を試してみましたが、問題は見つかりませんでした。
多くのユーザーがこれを報告していますが、彼らはその理由を示していません。ただ、開こうとすると強制的に閉じられるだけです。
おそらく私はアンドロイドのライフサイクルを正しく使用していませんか?
回避策として、通過できるように AdMob のものを try/catch でラップしました。
何か案は?
android - 複数のアクティビティを使用している場合、アクティビティがフォアグラウンドになった後に保持されたデータを処理する方法は?
現時点では、Android のライフサイクル管理について少し混乱しています。アクティビティがフォアグラウンドに戻った後、保持されたデータを再開するには、少なくとも 4 つの可能性があります。
Android の処理:十分なメモリがある場合、アクティビティの再起動後、Android は重要なデータ (チェックされたラジオ ボタン、EditText のテキストなど) を保存して再開します。ユーザーは、アクティビティが開始されたときと同じ状態になります。バックグラウンド。
onPause、onResume: onPause をオーバーライドし、重要なデータをデータベースまたはテキスト ファイルに保存し、次回の onResume 実行時に再開します。
onSavedInstance(Bundle)、onRestoreInstance(Bundle):データをキーと値のペアとしてバンドルに保存し、onRestoreInstance の実行後にそれらを復元できます。
onRetainNonConfigurationInstance()、getLastNonConfigurationInstance():ストレージの問題をすべて 1 つの大きなオブジェクトで処理し、onCreate の実行時に getLastNonConfigurationInstance() を読み取ります。
どのアプローチが最適かは混乱しますが、いつどの可能性を使用するかを知るには、開発経験に依存していると思います。それぞれの良い例があればうれしいですが、これは私の質問ではありません。さまざまなアクティビティがあり、バックグラウンドで一時停止すると Android によって 1 つのアクティビティが強制終了される場合、これらすべてにどのように対処すればよいのでしょうか。
私の場合、MainActivity と MessageActivity があります。MessageActivity は、2 つの状態で構成される ViewSwitcher で構成されます。状態 1 は、ラジオ ボタンの選択リストです。状態 2 は、2 つのボタン (送信と中止) を持つ EditText です。各状態をモンキーテストし、Android のホームボタンを押してアプリケーションを再起動すると、適切な状態の適切なアクティビティと古いデータがフォアグラウンドになり、処理を Android に任せます。それでうまくいきます。
しかし、Android がバックグラウンドで MessageActivity を破棄するとどうなるか: Android の方法を使用すると、データが失われ、次にアプリケーションを再起動した後に (MessageActivity->state(1 または 2) ではなく) MainActivity が開始されると思います (それは正しいですか?)。したがって、MessageActivity のデータを保持したい場合は、他の 3 つの可能性のいずれかを使用する必要があります。
アプリケーションのエントリ ポイント (つまり MainActivity) が最後のアクティブなアクティビティと異なる場合に、これを適切に行う方法。問題は、ViewSwitcher の特別な状態で特別なアクティビティを再開する必要があることです。onStart() または onResume() メソッドで startActivity(Intent) を使用して MainActivity から MessageActivity を開始できますが (MainActivity がおそらくエントリ ポイントであるため)、ライフサイクル管理で多くの論理的な問題が発生します。この事実のため、これが正しい方法だとは思いません。
しかし、それを行うための正しくて最良の方法は何ですか?
android - ベストプラクティス:フラグメント間のAndroidデータベース参照の管理
データのリストを表示するフラグメントと、バックグラウンドでデータを更新するさまざまなスレッド/クラスとの間の参照を処理するにはどうすればよいですか。このため、Observer-infなどを介してフラグメントの外部から強制的に更新できるようにする必要があります。
現在、ダミーのファクトリクラスを使用して、デフォルト設定に基づいて新しいSqlLiteDatabaseオブジェクトを作成しています。
次に、これを各フラグメントから呼び出してアダプターをセットアップします。同じことがdata-inserter-threadsにも当てはまります。データベースを閉じるには、アクティビティのonDestroy()をオーバーライドして、次のように呼び出します。initFor(this).close(); 。
これは非常に醜く、向きを変えると失敗します。SQLiteOpenHelperについて考えていますが、それがどのように役立つかわかりません。
java - Androidのsocket.close()により、「システムコールがキャンセルされました」?
私のMainActivityは、UdpListenerと呼ばれる別のスレッドを開始します。onResumeではスレッドが開始され(これは機能します)、onPauseでは停止するはずですが、socket.close()によりLogCatに「システムコールがキャンセルされました」というエラーメッセージが表示されます。UdpListener自体はJUnitテストで正常に機能するため、これはある種のAndroidの問題である必要があります。
これらは私のスレッドの対応するメソッドです:
MainActivity.onPause():
elseブランチのserverSocket.close()が実行され、LogCatエントリが発生しますが、なぜですか?
UPDATE
おそらく、close()が現在「受信」でブロックされているすべてのスレッドでSocketExceptionsをスローするため、Dalvikはこれをエラーとして認識しますが、この例外がこの問題に関連しているかどうかはわかりません。
http://docs.oracle.com/javase/1.4.2/docs/api/java/net/DatagramSocket.html#close()
android-intent - startactivityforresultが呼び出されるたびに、Androidがアプリケーションを強制終了します
さて、私のアプリケーションでは、startActivityforResultとしてAndroidのデフォルトのカメラとギャラリーを使用しています。
onActivityResultもキャッチできます。ただし、メモリが少なく、このアクティビティを開始すると、システムが親アクティビティを強制終了し、アクティビティが値を返しても、すべてのローカル変数を失いました(そして、onCreate()が再度呼び出されます)。onResume()のみを再度呼び出す必要があります。
何度か試しましたが、メモリの問題に関係していると確信しています。十分なメモリがある場合、プロセスは正常に実行されます。どうすればこの動作を防ぐことができますか?
Androidはフォアグラウンドでアプリケーションを強制終了しないので、この機能を引き続き使用できますか?私の問題はこれとほとんど同じだと思います。
解決
Yahelが提供するソリューションに加えて、次の方法を使用できます。
android - Android-ネットワークデータ操作中に着信を処理する方法
私のアプリケーションには、メニューでオプションが選択されたときにWebサービスにデータを送信する機能があります。これを行うために、アイテムが選択されるとAsyncTaskを実行するアクティビティがあります。
これは、デモンストレーションの目的で複雑さを軽減するために簡略化されたサンプルコードです。sendDataToWebService()メソッドは、選択イベントで呼び出されます。
ユーザーがWebサービスへのデータの送信を開始した後、送信中に着信電話を受信する状況を説明しようとしています。着信イベントが発生すると、アクティビティのonPauseメソッドが呼び出されますが、送信がAsyncTaskで行われているため、onPauseが完了した後もAsyncTaskスレッドは続行されます。
だから私はこの状況に対処するための最良の方法は何だろうかと思っていますか?AsyncTaskを実行し続けますか?着信イベントをリッスンして、AsyncTaskをキャンセルしようとしますか?
送信に使用されている無線(WiFiまたはセルネットワーク)はこれにどのように影響しますか?一部の通信事業者(Verizonなど)は、電話での会話中に携帯電話ネットワークを介したデータ送信を許可していないと思います。WiFiはどういうわけか電話の影響を受けますか?
これをサービスコンポーネント内のスレッドに移行すると、違いが生じますか?
android - onsaveinstance()メソッドのバンドル内のデータはデバイスのどこに保存されていますか?
1)onsaveinstance()メソッドのバンドル内のデータはデバイスのどこに保存されていますか?それはdata/dataディレクトリまたはsqliteDBまたは他の場所に保存されていますか?
android - Android Activites の onPause() と onStop() の違いは何ですか?
ここのAndroidドキュメントからhttp://developer.android.com/reference/android/app/Activity.html、「アクティビティがフォアグラウンドになる」と呼び出さonPause()
れ、「アクティビティが表示されなくなった」と呼び出されますonStop()
。
「アクティビティが前面に出る」は「アクティビティが見えなくなった」と同じではありませんか? それらの違いは何ですか?
android - Android - これが発生する理由 (「コンテンツがまだ作成されていません」というエラー)
これは次の質問のフォローアップです: Android - 「コンテンツ ビューがまだ作成されていません」と表示されるのはなぜですか?
したがって、次のコードはエラーをスローします。
しかし、ボタンをレイアウトに追加し、コードを OnClick メソッド内に配置すると、完全に機能します。このような:
なぜこれが起こるのですか?フラグメントのライフサイクルと関係があるに違いないことは理解していますが、何ですか? ボタンをクリックしたときだけでなく、フラグメントが開いたときにリストリストビューにデータが入力されるようにするにはどうすればよいですか?
ありがとう
編集:これが主な活動です
そしてフラグメント XML