1
我想按下一个按钮,并让该按钮触发一个定时器,每秒增加一个变量。当我关闭应用程序时,我希望增加的时间暂停,当应用程序打开时,我希望它从最后的位置恢复。我需要做什么?如何暂停/恢复处理程序/可运行?
这里是我的代码:
public class MainActivity extends ActionBarActivity {
public void save(){
Editor editor = pref.edit();
editor.putInt("countertest", counter);
editor.commit();
}//end of save
public void read(){
counter = pref.getInt("countertest", counter);
}//end of read
Handler testHandler = new Handler();
int counter;
TextView testView;
Button testButton;
Runnable Runnable0;
SharedPreferences pref;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
testView = (TextView) findViewById(R.id.testView);
testButton = (Button) this.findViewById(R.id.testButton);
pref = PreferenceManager.getDefaultSharedPreferences(this);
read();
testView.setText(Integer.toString(counter));
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return true;
}
return super.onOptionsItemSelected(item);
}
@Override
protected void onResume() {
read();
final Runnable Runnable0 = new Runnable() {
@Override
public void run() {
counter += 1;
testView.setText(Integer.toString(counter));
testHandler.postDelayed(this, 1000);
save();
}// end of if
};
/* button click */
testButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
/* Start runnable */
testButton.setEnabled(false);
counter -= 5;
save();
testView.setText(Integer.toString(counter));
testHandler.post(Runnable0);
}// end of onClick
});// end of blingButton onClickListener
super.onResume();
}//end of onResume
@Override
protected void onPause() {
save();
testHandler.removeCallbacks(Runnable0);
super.onPause();
}//end of onPause
}
我想在哪里存储“int lastRunnableCall = Calendar.getInstance()。getTimeInMillis();”?在onCreate? – Justin
我不明白你的解释,我仍然无法完成它的工作。 – Justin
对不起,我迟到的回复。 'lastRunnableCall'和'onPauseTime'是你活动的变量。每次调用run()'方法时,您都会设置'lastRunnableCall',并且在调用'onPause()'时设置'onPauseTime'。 – Dreagen