アクティビティのライフサイクルを調べてみましたが、コードをどこに配置すればよいかわかりません。
- 私の
onCreate()
中で私はGPS位置を取得します。 - アプリケーションの後半で、
Camera Intent
が呼び出され、その後閉じられます。 - GPS位置情報が再度取得されます(もう一度実行されていると思い
onCreate()
ますか?)
GPS位置情報を取得したいのは、アプリケーションの開始時に一度だけ取得することです。
アクティビティのライフサイクルを調べてみましたが、コードをどこに配置すればよいかわかりません。
onCreate()
中で私はGPS位置を取得します。Camera Intent
が呼び出され、その後閉じられます。onCreate()
ますか?)GPS位置情報を取得したいのは、アプリケーションの開始時に一度だけ取得することです。
すでに有効なGPS位置情報がある場合は、この手順をスキップして、再度取得しないようにすることができます。SharedPreferencesを使用して、この状態を保存できます。
お役に立てれば!
onCreate()
アクティビティが作成されているときに呼び出されます。そして、onStart()
直後に呼ばれていonCreate()
ます。
アクティビティのライフサイクルについては、http://developer.android.com/reference/android/app/Activity.htmlで読むことができます。
問題は、バンドルの保存に役立つメソッドであるonSaveInstanceStateをオーバーライドしてから、それをonCreateメソッドに戻すことができます(onCreateのパラメーターはこのバンドルです)。
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
*Modify the bundle*
}
また、GPS位置をシリアル化できない場合は、次を使用できます。
@Override
public Object onRetainNonConfigurationInstance() {
return objectYouNeed;
}
そして、このオブジェクトを取得するには、を使用しますgetLastNonConfigurationInstance()
。
それが役に立てば幸い!
背景のGPS位置を「取得」できない理由についての私の回答を参照してください。onCreate()メソッドでGPS位置を1回取得する(onCreate()を複数回呼び出す場合にGPS座標を取得しているかどうかを確認するための遅延初期化チェックを使用)は、アプリケーションにとって適切なアプローチではない可能性があり、原因となる可能性がありますアプリケーションはAndroidOSによって強制的に閉じられます。
デバイスの最後の既知の場所がアプリケーションにとって常に十分であると判断した場合は、GPS回路を使用する必要がないため、onCreate()メソッドが呼び出されるたびにデバイスを呼び出すことで問題ありません。したがって、最後の既知の場所で十分な場合は、onCreate()メソッドが呼び出されるたびにそれを要求するだけで、遅延初期化タイプのsofチェックの複雑さを回避できます。
最後の既知の場所がアプリケーションにとって必ずしも十分ではない場合、場所の修正に時間がかかりすぎるリスクがあり、Androidシステムが応答しないアプリを強制的に閉じるため、onCreate()メソッドで修正を確実に待つことができません。 onCreate()メソッドから時間内に戻らなかったためです。代わりに、onCreate()メソッド内でバックグラウンド非同期タスクを開始する必要があります(このような非同期タスクがまだ実行されていないことを確認します)。これは、十分な修正が受信されるまで場所の更新のリッスンを開始し、その場所を記憶します。ロケーションリスナーを停止し、GPS回路をオフにします。次の行に沿ってコードを使用します。
private MyAsynchGpsLocationListener mGpsListener = null;
public ... onCreate() {
if (mGpsListener == null) {
mGpsListener = new MyAsynchGpsLocationListener();
mGpsListener.start();
}
}
someMethod() {
if (mGpsListener != null) {
Location myLocation = mGpsListener.getLocation();
if (myLocation != null) {
// Do something with a "good enough" location
}
}
}
GPSの位置をインスタンスデータに保存する必要があります。インスタンスデータは、アクティビティが再開された場合に備えてonCreateに戻されます。それを保管する場所はonSaveInstance
onCreate()にのみ入れてください。
これで、何度も呼び出されていると思われる場合は、すでに持っているかどうかを確認するために何かを行うことはできません。そのような
onCreate(){
//other code
if(GpsStuff == null)
{
//get gps position
}
}