ユーザーが自分のアプリを開いて閉じるときに登録するにはどうしたらいいですか?私はすべてのオープニングとすべての閉会を登録したい。アンドロイドアプリの開封
たとえば、onResume()などのライフサイクルメソッドは、アプリが複数のアクティビティを使用するため効果的ではありません。
私はそれについて何も見つかりません。
ユーザーが自分のアプリを開いて閉じるときに登録するにはどうしたらいいですか?私はすべてのオープニングとすべての閉会を登録したい。アンドロイドアプリの開封
たとえば、onResume()などのライフサイクルメソッドは、アプリが複数のアクティビティを使用するため効果的ではありません。
私はそれについて何も見つかりません。
アプリが終了または実行されるかどうかを確認する最良の方法は、このようなものです:
public class MyApplication extends Application {
public static final String LOG_TAG = "MyApp";
public boolean wasInBackground = true;
private AppSession appSession;
private Timer mActivityTransitionTimer;
private TimerTask mActivityTransitionTimerTask;
private final long MAX_ACTIVITY_TRANSITION_TIME_MS = 2000; // Time allowed for transitions
Application.ActivityLifecycleCallbacks activityCallbacks = new Application.ActivityLifecycleCallbacks() {
@Override
public void onActivityResumed(Activity activity) {
if (wasInBackground) {
//Do app-wide came-here-from-background code
appEntered();
}
stopActivityTransitionTimer();
}
@Override
public void onActivityPaused(Activity activity) {
startActivityTransitionTimer();
}
...
};
@Override
public void onCreate() {
super.onCreate();
registerActivityLifecycleCallbacks(activityCallbacks);
}
public void startActivityTransitionTimer() {
this.mActivityTransitionTimer = new Timer();
this.mActivityTransitionTimerTask = new TimerTask() {
public void run() {
// Task is run when app is exited
wasInBackground = true;
appExited();
}
};
this.mActivityTransitionTimer.schedule(mActivityTransitionTimerTask,
MAX_ACTIVITY_TRANSITION_TIME_MS);
}
public void stopActivityTransitionTimer() {
if (this.mActivityTransitionTimerTask != null) {
this.mActivityTransitionTimerTask.cancel();
}
if (this.mActivityTransitionTimer != null) {
this.mActivityTransitionTimer.cancel();
}
this.wasInBackground = false;
}
private void appEntered() {
Log.i(LOG_TAG, "APP ENTERED");
appSession = new AppSession();
}
private void appExited() {
Log.i(LOG_TAG, "APP EXITED");
appSession.finishAppSession();
// Submit AppSession to server
submitAppSession(appSession);
long sessionLength = (appSession.getT_close() - appSession.getT_open())/1000L;
Log.i(LOG_TAG, "Session Length: " + sessionLength);
}
アプリケーションクラスのonCreateメソッドは、アプリケーションの起動時に一度だけ実行されます。おそらくアプリケーションクラスを拡張し、いくつかのロジックを作成しますか?
または、最初のアクティビティのonCreateメソッドでアプリケーションのオープニングを記録しているだけの場合は、
ありがとうございます!アプリケーションクラスのロジックは本当に難しいです。これは簡単な解決策ではありません。私はアンドロイドがそのための簡単な解決策を提供していないことに驚いています。たとえば、iOSの場合、2つのデリゲートメソッドがあります。あなたの2番目のソリューションの問題は、ユーザーが別のアクティビティで自分のアプリケーションを残して、再び最初のアクティビティonCreate()が呼び出されない場合です。すべてのオープニングでアプリケーションを再起動するためのアンドロイドのソリューションはありますか? – Waldi
すばらしいコード!この優雅なソリューションをお寄せいただきありがとうございます! – Waldi
あなたを助けてうれしいです。 – Orvenito