Android Service 通过 BroadcastReceiver 更新Activity UI
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的更多相关文章
- 浅谈android Service和BroadCastReceiver
1.题记 Android中的服务和windows中的服务是类似的东西,服务一般没有用户操作界面,它运行于系统中不容易被用户发觉,可以使用它开发如监控之类的程序. 广播接收者(BroadcastRece ...
- Android Activity、Service、BroadcastReceiver 的生命周期
Activity.Service.BroadcastReceiver这三个组建是Android开发中最常使用到的组件,在它们的生命周期的各个阶段我们需要针对性的做些事情,了解这些组件的生命周期有利于我 ...
- Android Service 通知Activity更新界面的方法研究
Android Service 通知Activity更新界面的方法研究 Android的最重要的组件式service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. ...
- Android:Service通知Activity更新界面
Android有四大组件,其中包括service和activity,那么在使用的过程中,我们最常遇到的问题是他们之间的通信问题. 1.首先Activity调用Service 这个是比较基础的,它有两种 ...
- Android平台的四大天王:Activity, Service, ContentProvider, BroadcastReceiver
今天开始要自学android,刚看到百度知道上面这段话,觉得不错(不过已经是2011年8月的回答了): Android系统的手机的每一个你能看到的画面都是一个activity,它像是一个画布,随你在上 ...
- (转)Android在子线程中更新Activity中UI的方法
转:http://blog.sina.com.cn/s/blog_3fe961ae0100mvc5.html 在Android平台下,进行多线程编程时,经常需要在主线程之外的一个单独的线程中进行某些处 ...
- Android面试收集录1 Activity+Service
1.Activity的生命周期 1.1.首先查看一下Activity生命周期经典图片. 在正常情况下,一个Activity从启动到结束会以如下顺序经历整个生命周期: onCreate()->on ...
- Android Service实时向Activity传递数据
演示一个案例,需求如下:在Service组件中创建一个线程,该线程用来生产数值,每隔1秒数值自动加1,然后把更新后的数值在界面上实时显示. 步骤如下:1.新建一个android项目工程,取名为demo ...
- Android开发 ---ContentProvider数据提供者,Activity和Service就是上下文对象,短信监听器,内容观察者
1.activity_main.xml <?xml version="1.0" encoding="utf-8"?> <LinearLayou ...
随机推荐
- C51工具是怎么进行覆盖分析的
C51工具针对8051微控制器的有限存储器资源进行了优化设计. 为了最有效地利用存储器,根据一个很容易解释的方法,自动变量和函数参数在存储器中均进行覆盖处理. 首先,连接器根据源程序生成调用树.例如: ...
- [置顶] 【cocos2d-x入门实战】微信飞机大战之六:子弹层的处理
这一篇将会处理完子弹层的其他要点. 1.子弹的初始位置 子弹的初始位置在飞机的机头位置,因为飞机在游戏的过程中会随着玩家的触摸而改变其位置,所以,子弹的初始位置只能以当前飞机位置为基准进行添加. CC ...
- bzoj3431 [Usaco2014 Jan]Bessie Slows Down
Description [Brian Dean, 2014] Bessie the cow is competing in a cross-country skiing event at the wi ...
- Android_Studio常用插件
Android studio常用插件,可极大简化开发,增强开发效率. 不懂安装studio插件,看参考博文:android stuido插件安装:http://blog.csdn.net/liang5 ...
- IBM发布JumpGate 连接OpenStack和公有云
IBM希望JumpGate能够成为OpenStack私有云和公共云之间的“时空门”.JumpGate是IBM开发的用来解决云管理生态系统碎片化问题的中间件工具,用来吸引更多的云服务商支持OpenSta ...
- Unable to resolve target 'android-14' 解决办法
学习安卓的时候用Eclipse导入工程之后出现Unable to resolve target 'android-14' 这样的问题,代码确定没有问题,因为是从网上教程下载的示例代码,上网搜索了一下, ...
- pyqt最小化学习
# -*- coding: cp936 -*- #!/usr/bin/env python # -*- coding:utf-8 -*- from PyQt4 import QtCore, QtGui ...
- c++之 变量
变量的基本操作 变量就是一个可以变化的量,变量由变量类型.变量名.初始值(可选)组成,例如: int abc = 10; 变量类型:int 变量名:abc 初始值:10 // 该值为可选项,在创建变量 ...
- springmvc工作原理和环境搭建
SpringMVC工作原理 上面的是springMVC的工作原理图: 1.客户端发出一个http请求给web服务器,web服务器对http请求进行解析,如果匹配DispatcherServle ...
- 黑马程序猿 IO流 ByteArrayInputStream与ByteArrayOutputStream
---------------------- ASP.Net+Unity开发..Net培训.期待与您交流! ---------------------- package cn.itcast.IO; i ...