1:MainActivity.java

public class MainActivity extends Activity {
private TextView tvInfo = null;
private BroadcastReceiver receiver = null; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); tvInfo = (TextView)findViewById(R.id.tvInfo); receiver = new BroadcastReceiver(){
@Override
public void onReceive(Context context, Intent intent) {
String info = intent.getExtras().getString("data");
tvInfo.setText(info);
}
}; IntentFilter filter = new IntentFilter();
filter.addAction("com.example.timejob.service");
registerReceiver(receiver,filter);
} @Override
protected void onResume() {
super.onResume();
if(!isServiceRunning()){
Intent intent = new Intent(this,MyService.class);
this.startService(intent);
Log.d("onResume:", "服务运行");
}
} @Override
public void onStop() {
super.onStop();
if(isServiceRunning()){
Intent is = new Intent(this,MyService.class);
this.stopService(is);
Log.d("onStop:", "服务关闭");
}
this.unregisterReceiver(receiver);
} /*
* 判断service是否运行
*/
private boolean isServiceRunning() {
ActivityManager manager = (ActivityManager) getSystemService(ACTIVITY_SERVICE);
for (RunningServiceInfo service : manager.getRunningServices(Integer.MAX_VALUE)) {
if ("com.example.timejob.MyService".equals(service.service.getClassName())) {
return true;
}
}
return false;
}
}

2:MyService.java

public class MyService extends Service{
public Timer timer = null;
public String info = null; @Override
public IBinder onBind(Intent arg0) {
return null;
} @Override
public void onCreate() {
super.onCreate();
} @Override
public int onStartCommand(Intent intent, int flags, int startId) { doJob(); return super.onStartCommand(intent, flags, startId);
} private void doJob(){
timer = new Timer();
//10s触发一次
timer.schedule(new MyTimerWork(),0, 1000*10);
} private class MyTimerWork extends TimerTask{
@Override
public void run() {
info = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss").format(new Date());
Intent intent = new Intent();
intent.setAction("com.example.timejob.service");
intent.putExtra("data", info);
sendBroadcast(intent);
Log.d("MyTimerWork:", "定时任务执行:"+info);
}
} @Override
public void onDestroy() {
super.onDestroy();
if(null!=timer){
timer.cancel();
}
}
}

3:AndroidManifest.xml

 <service
android:name="com.example.timejob.MyService"
android:enabled="true"
android:exported="false" />

Android Service 通过 BroadcastReceiver 更新Activity UI的更多相关文章

  1. 浅谈android Service和BroadCastReceiver

    1.题记 Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序. 广播接收者(BroadcastRece ...

  2. Android Activity、Service、BroadcastReceiver 的生命周期

    Activity.Service.BroadcastReceiver这三个组建是Android开发中最常使用到的组件,在它们的生命周期的各个阶段我们需要针对性的做些事情,了解这些组件的生命周期有利于我 ...

  3. Android Service 通知Activity更新界面的方法研究

    Android Service 通知Activity更新界面的方法研究   Android的最重要的组件式service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. ...

  4. Android:Service通知Activity更新界面

    Android有四大组件,其中包括service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. 1.首先Activity调用Service 这个是比较基础的,它有两种 ...

  5. Android平台的四大天王:Activity, Service, ContentProvider, BroadcastReceiver

    今天开始要自学android,刚看到百度知道上面这段话,觉得不错(不过已经是2011年8月的回答了): Android系统的手机的每一个你能看到的画面都是一个activity,它像是一个画布,随你在上 ...

  6. (转)Android在子线程中更新Activity中UI的方法

    转:http://blog.sina.com.cn/s/blog_3fe961ae0100mvc5.html 在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处 ...

  7. Android面试收集录1 Activity+Service

    1.Activity的生命周期 1.1.首先查看一下Activity生命周期经典图片. 在正常情况下,一个Activity从启动到结束会以如下顺序经历整个生命周期: onCreate()->on ...

  8. Android Service实时向Activity传递数据

    演示一个案例,需求如下:在Service组件中创建一个线程,该线程用来生产数值,每隔1秒数值自动加1,然后把更新后的数值在界面上实时显示. 步骤如下:1.新建一个android项目工程,取名为demo ...

  9. Android开发 ---ContentProvider数据提供者,Activity和Service就是上下文对象,短信监听器,内容观察者

    1.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...

随机推荐

  1. AutoCompleteTextView 与sqlite绑定实现记住用户输入的内容并自动提示

    把用户输入的内容保存到数据库表中,然后用户输入时,进行模糊查询并把查询结果附到AutoCompleteTextView中. 1:activity_main.xml <LinearLayout x ...

  2. 关于box-sizing

    http://www.zhangxinxu.com/css3/css3-box-sizing.php box-sizing:border-box; -o-box-sizing:border-box; ...

  3. cf C. Cupboard and Balloons

    http://codeforces.com/contest/342/problem/C #include <cstdio> #include <cstring> #includ ...

  4. grep详解

    一.简介 Global Regular Expression Print,是一种强大的文本搜索工具,能使用正则表达式. 二.语法 grep [OPTIONS] PATTERN [FILE...]gre ...

  5. 通过jstack定位在线运行java系统故障_案例1

    问题描述: 在一个在线运行的java web系统中,会定时运行一个FTP上传的任务,结果有一天发现,文件正常生成后却没有上传. 问题初步分析: 1.查看日志文件 发现这个任务只打印了开始进入FTP处理 ...

  6. libeXosip2(1-3) -- How-To send or update registrations.

    How-To send or update registrations. The eXtented eXosip stack Initiate a registration To start a re ...

  7. JQuery 图片延迟加载并等比缩放插件

    原文地址:http://www.shangxueba.com/jingyan/1909987.html DEMO地址:http://demo.jb51.net/html/jquery_img/jque ...

  8. 理解 Linux 配置文件分类和使用

    理解 Linux 配置文件分类和使用 本文说明了 Linux 系统的配置文件,在多用户.多任务环境中,配置文件控制用户权限.系统应用程序.守护进程.服务和其它管理任务.这些任务包括管理用户帐号.分配磁 ...

  9. Colorful Lecture Note(手工栈)

    题目1 : Colorful Lecture Note 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 Little Hi is writing an algorithm ...

  10. 新手使用ThinkPHP3.2.3的命名空间问题

    ThinkPHP3.2.3的命名空间问题 命名空间的出现是为了避免命名冲突. 我们在TP3.2.3的Collection和Model的创建过程中经常会遇到这样的两行代码: 这是在控制器中的写法.其中n ...