帮我看看这段定时器代码,总崩溃!
想练习一下定时器的使用,编写了下面的代码。
设计要求是:进程启动后,只要人不主动关闭它,它就会不断在自己的界面上显示一个越来越大的数字,每 2s 累加一次。哪怕锁屏、放到后台、启动其他进程等,它也会照样累加。
但是实际用下来经常崩溃,具体来说:
1、如果执行了 onPause() 之后,再执行 onStart,则必崩溃;
2、如果不关闭前一个进程,同时新开一个同样的进程,则必崩溃;就是说这个 APP 不允许同时有两个实例;
3、放到后台运行或者锁屏后,有时也会崩溃,但也有时不崩溃。
下面是代码,请问问题在哪里呢?谢谢!
public class MainActivity extends AppCompatActivity {
private int g_iCounter =0;
private final Timer g_timer = new Timer();
private TimerTask g_task;
TextView g_tv = null;
Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
// TODO Auto-generated method stub
g_iCounter++;
String s = String.format("%d", g_iCounter);
g_tv.setText(s);
super.handleMessage(msg);
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
g_tv = (TextView)findViewById(R.id.textView);
g_task = new TimerTask() {
@Override
public void run() {
// TODO Auto-generated method stub
Message message = new Message();
message.what = 1;
handler.sendMessage(message);
}
};
}
public void onStart(View view) { //点击 START 按钮时执行本函数,开始计数
g_timer.schedule(g_task, 2000, 2000);
}
public void onPause(View view) { //点击 PAUSE 按钮时执行本函数,暂停计数
g_timer.cancel();
}