您的位置:首页 > 移动开发 > Android开发

Android---Service Timer之执行周期任务

2016-03-09 01:02 369 查看
我们有时候需要隔一段时间去做一件事,比如检查邮件,检查网络情况等等。本篇文章简单介绍下如何使用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>


运行截图:



源码下载

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: