我们有时候需要隔一段时间去做一件事,比如检查邮件,检查网络情况等等。本篇文章简单介绍下如何使用Service Timer 去执行周期任务,程序界面上显示一个数字,每隔一秒钟更新 ,每5秒钟显示一个toast。
1.自定义service
public class MyService extends Service {
private static final long INTERVAL = 5 * 1000;
private Handler handler = new Handler();
private Timer mTimer;
@Override
public IBinder onBind(Intent arg0) {
return null;
}
@Override
public void onCreate() {
super.onCreate();
// 如果已经存在,则先取消
if (mTimer != null) {
mTimer.cancel();
} else {
mTimer = new Timer();
}
mTimer.scheduleAtFixedRate(new MyTimerTask(), 0, INTERVAL);
}
private class MyTimerTask extends TimerTask {
@Override
public void run() {
// 新开一个线程执行
handler.post(runnable);
}
}
private Runnable runnable = new Runnable() {
@Override
public void run() {
Toast.makeText(getApplicationContext(), getTime(),
Toast.LENGTH_SHORT).show();
}
};
private String getTime() {
return new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
}
@Override
public void onDestroy() {
super.onDestroy();
mTimer.cancel();
}
}
2.activity_main.xml文件
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context="com.example.refreshdemo.MainActivity" >
<TextView
android:id="@+id/tvNum"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</RelativeLayout>
3.MainActivity.java
public class MainActivity extends Activity {
private TextView tvNum;
private int count = 0; // 计数
private Handler handler = new Handler();
private Intent serviceIntent;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tvNum = (TextView) findViewById(R.id.tvNum);
tvNum.setText("0");
handler.postDelayed(runnable, 1000);
serviceIntent = new Intent(this, MyService.class);
this.startService(serviceIntent);
}
private Runnable runnable = new Runnable() {
@Override
public void run() {
update();
handler.postDelayed(this, 1000);
}
};
private void update() {
count++;
tvNum.setText(count + "");
}
@Override
protected void onDestroy() {
super.onDestroy();
handler.removeCallbacks(runnable);
this.stopService(serviceIntent);
}
}
4.最后在AndroidManifest.xml文件中添加Service
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@android:style/Theme.Holo.Light">
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
**<service android:name="com.example.refreshdemo.MyService"></service>**
</application>
运行截图: