Android:onCreate被反复调用

时间:2012-04-24 05:19:40

标签: android

我有一项活动,我需要实现一个基本的mm :: ss计时器。下面是我为它编写的代码。但问题是,当我按下模拟器中的后退按钮并再次单击应用程序时,值的变化会更快。看起来onCreate再次被调用。我该如何纠正这个? 我已经尝试创建一个布尔变量,并在第一次调用任务时将其设置为true。我只在值为false时调用startPeriodidUpdates()。但onCreate再次使用false值创建变量。

   public class GraphicsActivity extends Activity {
static int seconds = 0;
static int minutes = 0;
public static String time_elapsed;
public static boolean clearView = true;
Handler myhandler = new Handler();
public static String min,sec;  
public static boolean running = true;


   @Override
    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
     startPeriodicUpdates();

    } 
    public void onResume(){
    super.onResume();
    } 
    public void onPause() {
    super.onPause();    
    }
   public void onStop(){
   super.onStop();
    }

   public void startPeriodicUpdates()
   {
periodicCall();
   }
   public void stopPeriodicUpdates(){ 
     myhandler.removeCallbacksAndMessages(myhandler);
   }

   public  void periodicCall()
    {

seconds++;
if(seconds ==60)
{
    seconds=0;
    minutes++;
    if(minutes==60)
    {
        seconds=0;
        minutes=0;
    }
}
// left-padding zeros to the minutes and seconds values
min = String.format("%02d",minutes);
sec = String.format("%02d",seconds);
time_elapsed =  min + ":" + sec;
time_elapsed =  min + ":" + sec + "";
myhandler.postDelayed(new Runnable(){
    public void run(){
        periodicCall();

    }
},1000);

}

4 个答案:

答案 0 :(得分:1)

也许这会有所帮助:执行定期任务的正确方法是在OnResume中注册处理程序并在OnPause中取消注册。 (您可以取消注册其他地方,但OnPause很重要)

答案 1 :(得分:1)

如果您使用服务来实现计时器,我认为会更好。即使您按下按钮,服务也会继续运行。

Here你可以看到我刚才问过的一个问题。您可以使用服务查看自定义天文台的实现。

您想要接收计时器值的活动只需要有一个BroadcastReceiver,如:

    private BroadcastReceiver broadcastReceiver = new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        mMilis = intent.getLongExtra("milis",0);
        String time = intent.getStringExtra("tiempo");
        // Do Something with the time
    }
};

答案 2 :(得分:0)

这可能不是上述问题的解决方案,但如果您只想更新视图并在给定时间内计算,请查看Chronometer。如果您想倒计时并更新视图,可以使用CountDownTimer

执行此操作

答案 3 :(得分:0)

您可以使用共享首选项仅使用此方法一次。

//第一次传递真实

 protected void storeSharedPrefs(Boolean value) {
        /*
         * Storing in Shared Preferences
         */
        editor.putString("first", value);
        editor.commit();  //Commiting changes
    } 

通过检查SharedPreferences

检查每个应用程序是否已加载,是否第一次和配置详细信息已正确输入
private boolean first_time_check() {
        /* 
         * Checking Shared Preferences if the user had pressed 
         * */
        Boolean  first = uPreferences.getString("first", false);

            return first;
    }