我想在我的应用程序中做什么: 1. 当用户打开应用程序时,他将能够看到一个已经在运行的倒数计时器。所以在那种情况下,我想在一个总是每秒更新的文本视图中显示倒计时数字。2. 用户将能够停止它。3. 用户可以离开应用程序,但是当他回到应用程序界面时,倒计时仍然会继续并显示更新的时间。
所以基于以上几点,我知道我需要实现在后台工作的服务。我已阅读此链接,但我的问题在于实施。我对如何实现这种方式感到很迷茫。话虽如此,一旦用户返回应用程序,我也想不出一种在 UI 中显示时间的方法。我也看到了这个链接 ,但我不确定是否只实现 CountDownTimer 使它成为一个正在运行的服务。那么我应该如何进行和实施呢?感谢任何指向特定教程/代码的链接。谢谢。
更新:到目前为止,我已经能够做到以下几点:MainActivity.java
public class MainActivity extends Activity {
Button btnStart,btnStop;
Intent serviceIntent;
TextView tv;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnStart = (Button) findViewById(R.id.btnStart);
btnStop = (Button) findViewById(R.id.btnStop);
tv = (TextView) findViewById(R.id.timeView);
//final MyCounter timer = new MyCounter(100000,1000);
//tv.setText("100");
//timer.start();
serviceIntent = new Intent(MainActivity.this,MyService.class);
btnStart.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
startService(serviceIntent);
}
});
btnStop.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
stopService(serviceIntent);
}
});
}
@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;
}
我的服务.java:
public class MyService extends Service {
MyCounter timer;
@Override
public void onCreate() {
// TODO Auto-generated method stub
timer = new MyCounter(100000,1000);
super.onCreate();
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
timer.start();
return super.onStartCommand(intent, flags, startId);
}
private class MyCounter extends CountDownTimer{
public MyCounter(long millisInFuture, long countDownInterval) {
super(millisInFuture, countDownInterval);
}
@Override
public void onFinish() {
Toast.makeText(getApplicationContext(), "death", Toast.LENGTH_LONG).show();
stopSelf();
}
@Override
public void onTick(long millisUntilFinished) {
Toast.makeText(getApplicationContext(), (millisUntilFinished/1000)+"", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
timer.cancel();
//stopSelf();
super.onDestroy();
}
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return null;
}
}
问题是: 1. 除了这个 Toast 之外,我不知道如何在 MainActivity UI 上显示倒计时。2. 按停止键不停止计数。