【问题标题】:Activity, FragmentActivity Foreground TimeActivity、FragmentActivity 前台时间
【发布时间】:2019-10-20 19:13:41
【问题描述】:

Android Activity 是否有一些选项可以知道用户可以看到多少秒

或者我必须使用 onCreate、onStart、onResume、onPause、onStop、onRestart、onDestroy

计算可见的每一秒

【问题讨论】:

    标签: android android-activity android-fragmentactivity


    【解决方案1】:

    没错。如果您想跟踪所有应用程序活动,您可以声明一个抽象活动类,它们都从该类扩展,并在上述回调中执行相关时间跟踪。

    public abstract class BaseActivity extends Activity/AppCompatActivity {
    
        @Override
        protected void onPause() {
            super.onPause();
            //saveTime
        }
    
        ...
    }
    

    .

    public abstract class MainActivity extends BaseActivity {
    
    ...
    
    }
    

    【讨论】:

      【解决方案2】:

      有一个简单的方法,如果你不要求高精度

      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 .
          }
      }
      

      最后,在正确的时间上传数据!

      【讨论】:

        【解决方案3】:

        实际上您建议的方式是计算活动可见时间的最合适的方法之一。

        步骤

        在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,现在您可以将其保存到数据库或文件或任何您想要的地方。

        【讨论】:

          猜你喜欢
          • 2022-11-10
          • 1970-01-01
          • 1970-01-01
          • 2012-05-15
          • 2013-07-19
          • 1970-01-01
          • 1970-01-01
          • 2015-09-26
          • 2012-10-23
          相关资源
          最近更新 更多