【问题标题】:Android currentTimeMillisAndroid currentTimeMillis
【发布时间】:2013-08-03 14:03:03
【问题描述】:

您好,我有一个启动 System.currentTimeMillis 的应用程序,用于了解您自启动以来使用该应用程序多长时间,它运行良好

但我想做的是将保存的毫秒添加到当前系统毫秒,因此在加载数据时它将从停止的地方继续。

long starttime = System.currentTimeMillis(), millis;
int seconds, minutes, hours;

final Handler h = new Handler(new Callback() 
{
  public boolean handleMessage(Message msg) 
  {

           millis = System.currentTimeMillis() - starttime;
           seconds = (int) (millis / 1000);
           minutes = seconds / 60;
           hours = minutes / 60;
           seconds = seconds % 60;
           minutes = minutes % 60;


       playtime.setText(String.format("%d:%02d:%02d", hours, minutes, seconds));
       return false;
    }
});
class firstTask extends TimerTask 
{
     @Override
     public void run() 
     {
         h.sendEmptyMessage(0);
     }
};
Timer timer = new Timer();

【问题讨论】:

  • 应用程序重启后是否需要它?利用 SharedPreference..
  • 是的,如果它在 5 小时后重新启动或启动,则在加载数据时我希望有时间继续。
  • 您熟悉 SharedPreferences 吗?
  • 不,我是 Android 编程新手

标签: java android system add


【解决方案1】:

谢谢你们启发了我,我想出了一个解决方案

long starttime = 0, millis, time_saved = 0;
int seconds, minutes, hours, stime = 0;

final Handler h = new Handler(new Callback() 
{
   public boolean handleMessage(Message msg) 
    {
       if(stime == 0)
       {
           millis = System.currentTimeMillis() - starttime;
           seconds = (int) (millis / 1000);
           minutes = seconds / 60;
           hours = minutes / 60;
           seconds = seconds % 60;
           minutes = minutes % 60;
       }
       else
       {
           millis = (System.currentTimeMillis() - starttime) + time_saved;
           seconds = (int) (millis / 1000);
           minutes = seconds / 60;
           hours = minutes / 60;
           seconds = seconds % 60;
           minutes = minutes % 60;
       }


       playtime.setText(String.format("%d:%02d:%02d", hours, minutes, seconds));
       return false;
    }
});
class firstTask extends TimerTask 
{
     @Override
     public void run() 
     {
         h.sendEmptyMessage(0);
     }
};
Timer timer = new Timer();

在方法中

private void ST()
{
    time_saved = millis;
}

当我想恢复时,我调用这个方法

private void resumetime()
{
    starttime = System.currentTimeMillis();
    stime = 1;
}

效果很好

【讨论】:

    【解决方案2】:

    我将解释一个使用 SharedPreferences 的示例程序。

    创建一个 Android 项目。

    现在,这是我的 MainActivity.java

    import android.os.Bundle;
    import android.preference.PreferenceManager;
    import android.app.Activity;
    import android.content.SharedPreferences;
    import android.view.Menu;
    import android.widget.Toast;
    
    public class MainActivity extends Activity {
    
        SharedPreferences pref;
        long uptime,starttime,endtime;
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            // now, I'm getting app uptime in seconds.
             pref = PreferenceManager.getDefaultSharedPreferences(this);
            Toast.makeText(this, "Up time:"+pref.getString("time", "0"), Toast.LENGTH_SHORT).show();
             uptime=Long.parseLong(pref.getString("time", "0"));
             starttime = System.currentTimeMillis()/1000;
    
        }
        @Override
        protected void onDestroy() {
            endtime=System.currentTimeMillis()/1000;
            uptime=uptime+(endtime-starttime);
            final SharedPreferences.Editor editor = pref.edit();
            editor.putString("time", ""+uptime);
            editor.commit();
            super.onDestroy();
        }
    
    
    
    }
    

    【讨论】:

      【解决方案3】:

      基本上,您想要的是保存在每个会话中花费的时间并将其添加到您之前的测量中等等。共享偏好是实现此目的的好方法。我的建议是创建一个如下所示的类:

      public class AppPreferences {
          private static final String APP_SHARED_PREFS = "com.your.app";
      
          private SharedPreferences appSharedPrefs;
          private Editor prefsEditor;
      
      
          /**
           * 
           * @param context
           */
          public AppPreferences(Context context) {
              this.appSharedPrefs = context.getSharedPreferences(APP_SHARED_PREFS,
                      Activity.MODE_PRIVATE);
              this.prefsEditor = appSharedPrefs.edit();
      
          }
      }
      

      然后,将这些方法放入你的类中:

      public void saveTimeSpentOnSession(long time){
      
          long timeSpentSoFar = getTimeSpentSoFar()
          // or you can do
          // long timeSpentSoFar = appSharedPrefs.getLong("timeSpent",0);
          prefsEditor.putLong("timeSpent",time+timeSpentSoFar);
          prefsEditor.commit();
      
      }
      
      public long getTimeSpentSoFar(){
          return appSharedPrefs.getLong("timeSpent",0);
      }
      

      无论何时你想调用 put / get 方法,你只需创建一个此类的实例,如下所示:

      AppPreferences prefs = new AppPreferences(getApplicationContext()); // in an activity
      

      然后打电话

      prefs.saveTimeSpentOnSession(yourTime);
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2020-11-13
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-02-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多