【发布时间】:2019-10-20 19:13:41
【问题描述】:
Android Activity 是否有一些选项可以知道用户可以看到多少秒
或者我必须使用 onCreate、onStart、onResume、onPause、onStop、onRestart、onDestroy
计算可见的每一秒【问题讨论】:
标签: android android-activity android-fragmentactivity
Android Activity 是否有一些选项可以知道用户可以看到多少秒
或者我必须使用 onCreate、onStart、onResume、onPause、onStop、onRestart、onDestroy
计算可见的每一秒【问题讨论】:
标签: android android-activity android-fragmentactivity
没错。如果您想跟踪所有应用程序活动,您可以声明一个抽象活动类,它们都从该类扩展,并在上述回调中执行相关时间跟踪。
public abstract class BaseActivity extends Activity/AppCompatActivity {
@Override
protected void onPause() {
super.onPause();
//saveTime
}
...
}
.
public abstract class MainActivity extends BaseActivity {
...
}
【讨论】:
有一个简单的方法,如果你不要求高精度
public class TestImpl implements Application.ActivityLifecycleCallbacks {
...
...
@Override
public void onActivityStarted(Activity activity) {
//do something here,such as recording time,use differents tag .
}
@Override
public void onActivityPaused(Activity activity) {
//do something here,such as save the data to the database with your tag .
}
}
最后,在正确的时间上传数据!
【讨论】:
实际上您建议的方式是计算活动可见时间的最合适的方法之一。
步骤
在onResume 内启动处理程序,如
public void onResume() {
super.onResume()
If(mHandler==null){
mHandler = new Handler()
mHandler.postDelayed(mRunnable, 1000)
}
}
Runnable mRunnable = new Runnable() {
public void run() {
mCountSeconds++;
mHandler.postDelayed(this, 1000);
}
};
现在你可以移除onDestroy中的回调
public void onDestroy() {
super.onDestroy()
// Here you can measure time in seconds simple access mCounterSeconds
If(mHandler != null){
mHandler.removeCallbacks(mRunnable)
}
//here you can save counter value into db, sharedprefs, file...
}
毕竟,您将获得mCountSeconds,现在您可以将其保存到数据库或文件或任何您想要的地方。
【讨论】: