Android---Service Timer之执行周期任务
2016-03-09 01:02
369 查看
我们有时候需要隔一段时间去做一件事,比如检查邮件,检查网络情况等等。本篇文章简单介绍下如何使用Service Timer 去执行周期任务,程序界面上显示一个数字,每隔一秒钟更新 ,每5秒钟显示一个toast。
1.自定义service
2.activity_main.xml文件
3.MainActivity.java
4.最后在AndroidManifest.xml文件中添加Service
运行截图:
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>
运行截图:
源码下载
相关文章推荐
- Android服务器配置编译指南
- Android数据库SQLite操作详解及LitePal用法详解(三)
- Android Studio--HelloWorld
- Android View绘制流程
- Android Studio 混淆注意事项
- Android 之常见Intent
- Android软键盘弹出,界面整体上移的问题
- Android :uses-feature和uses-permission的关系和区别
- Android studio的简单设置
- Android 事件传递机制
- ubuntu 安装android studio
- 开源项目之Android Afinal框架
- Android Action使用实例
- Java和Android基础知识
- AndroidManifest.xml uses-feature 详解
- Android Environment.getExternalStorageDirectory() 获取的是内部存储还是外部存储?
- android
- Android开发艺术鉴赏第二章 IPC
- Android数据库SQLite操作详解及LitePal用法详解(二)
- android中的文件操作详解以及内部存储和外部存储