我们建立一个Service:
package com.andy
import android.app.Service;//引入相关包
import android.content.BroadcastReceiver;//引入相关包
import android.content.Context;//引入相关包
import android.content.Intent;//引入相关包
import android.content.IntentFilter;//引入相关包
import android.os.IBinder;//引入相关包
//继承自Service的子类
public class MyService extends Service{
CommandReceiver cmdReceiver;
boolean flag;
@Override
public void onCreate() {//重写onCreate方法
flag = true;
cmdReceiver = new CommandReceiver();
super.onCreate();
}
@Override
public IBinder onBind(Intent intent) {//重写onBind方法
// TODO Auto-generated method stub
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {//重写onStartCommand方法
IntentFilter filter = new IntentFilter();//创建IntentFilter对象
filter.addAction("wyf.wpf.MyService");
registerReceiver(cmdReceiver, filter);//注册Broadcast Receiver
doJob();//调用方法启动线程
return super.onStartCommand(intent, flags, startId);
}
//方法:
public void doJob(){
new Thread(){
public void run(){
while(flag){
try{//睡眠一段时间
Thread.sleep(1000);
}
catch(Exception e){
e.printStackTrace();
}
Intent intent = new Intent();//创建Intent对象
intent.setAction("wyf.wpf.Sample_3_6");
intent.putExtra("data", Math.random());
sendBroadcast(intent);//发送广播
}
}
}.start();
}
private class CommandReceiver extends BroadcastReceiver{//继承自BroadcastReceiver的子类
@Override
public void onReceive(Context context, Intent intent) {//重写onReceive方法
int cmd = intent.getIntExtra("cmd", -1);//获取Extra信息
if(cmd == Sample_3_6.CMD_STOP_SERVICE){//如果发来的消息是停止服务
flag = false;//停止线程
stopSelf();//停止服务
}
}
}
@Override
public void onDestroy() {//重写onDestroy方法
this.unregisterReceiver(cmdReceiver);//取消注册的CommandReceiver
super.onDestroy();
}
}
建立一个activity
package com.andy;//声明包语句
import android.app.Activity;//引入相关包
import android.content.BroadcastReceiver;//引入相关包
import android.content.Context;//引入相关包
import android.content.Intent;//引入相关包
import android.content.IntentFilter;//引入相关包
import android.os.Bundle;//引入相关包
import android.view.View;//引入相关包
import android.view.View.OnClickListener;//引入相关包
import android.widget.Button;//引入相关包
import android.widget.TextView;//引入相关包
//继承自Activity的子类
public class Sample_3_6 extends Activity {
public static final int CMD_STOP_SERVICE = 0;
Button btnStart;//开始服务Button对象应用
Button btnStop;//停止服务Button对象应用
TextView tv;//TextView对象应用
DataReceiver dataReceiver;//BroadcastReceiver对象
@Override
public void onCreate(Bundle savedInstanceState) {//重写onCreate方法
super.onCreate(savedInstanceState);
setContentView(R.layout.main);//设置显示的屏幕
btnStart = (Button)findViewById(R.id.btnStart);
btnStop = (Button)findViewById(R.id.btnStop);
tv = (TextView)findViewById(R.id.tv);
btnStart.setOnClickListener(new OnClickListener() {//为按钮添加点击事件监听
@Override
public void onClick(View v) {//重写onClick方法
Intent myIntent = new Intent(Sample_3_6.this, wyf.wpf.MyService.class);
Sample_3_6.this.startService(myIntent);//发送Intent启动Service
}
});
btnStop.setOnClickListener(new OnClickListener() {//为按钮添加点击事件监听
@Override
public void onClick(View v) {//重写onClick方法
Intent myIntent = new Intent();//创建Intent对象
myIntent.setAction("wyf.wpf.MyService");
myIntent.putExtra("cmd", CMD_STOP_SERVICE);
sendBroadcast(myIntent);//发送广播
}
});
}
private class DataReceiver extends BroadcastReceiver{//继承自BroadcastReceiver的子类
@Override
public void onReceive(Context context, Intent intent) {//重写onReceive方法
double data = intent.getDoubleExtra("data", 0);
tv.setText("Service的数据为:"+data);
}
}
@Override
protected void onStart() {//重写onStart方法
dataReceiver = new DataReceiver();
IntentFilter filter = new IntentFilter();//创建IntentFilter对象
filter.addAction("wyf.wpf.Sample_3_6");
registerReceiver(dataReceiver, filter);//注册Broadcast Receiver
super.onStart();
}
@Override
protected void onStop() {//重写onStop方法
unregisterReceiver(dataReceiver);//取消注册Broadcast Receiver
super.onStop();
}
}
- 浏览: 960637 次
最新评论
-
JueLie:
规划规划
【Java线程】锁机制:synchronized、Lock、Condition -
yuejingjiahong:
android自带Json API -
ti_an_1989:
所以这种情况是不使用launchMode为singleTask ...
android Task,launcherMode对返回键与laucher的影响 -
IXHONG:
http://itlong.com
依赖注入和控制反转 -
lookstorm:
好文
java内存模型
在Android中,异步更新UI,通常我们会选用Handler启动线程,或者sendMessage的方式,那么利用Service和广播也可以更新UI的,例子如下:
发表评论
-
android加载include
2013-03-07 13:27 1334例子一: sublayout.xml <?xml v ... -
android: 横竖屏切换总结-布局改变和数据保存
2012-11-04 21:44 13270目录:引言一、布局问题二、重新载入问题 三、Q:横竖屏生命 ... -
android中各种颜色在drawable.xml的值
2012-07-23 15:41 1278< drawable name="white ... -
MeasureSpec介绍及使用详解(转)
2012-06-10 22:01 1087一个MeasureSpec封装了父布局传递给子布局的布 ... -
GestureDetector和SimpleOnGestureListener的使用教程
2012-06-10 20:50 11371. 当用户触摸屏幕的时候,会产生许多手势,例如down, ... -
android UI进阶之实现listview的下拉加载
2012-06-10 10:01 3774关于listview的操作五花八门,有下拉刷新,分级显 ... -
ViewGroup布局
2012-05-29 12:20 1364viewgroup简单说就是可以装view的vi ... -
自定义Android ListView控件:ExpandableListView
2012-04-21 00:01 4879public class Main extends L ... -
浅谈android的selector背景选择器
2012-02-25 09:07 968关于listview和button都要改变androi ... -
Android 列表之分组ListView
2011-11-30 15:26 14237运行效果: main.xml Java代码 ... -
ListView 选中字体变大
2011-11-30 15:20 1770目标:listview中item使用textview,当ite ... -
ListView 常用方法
2011-11-27 15:56 1162①.使用listView或者gridView时,当列 ... -
Dialog
2011-11-27 13:27 1178对话框是Android中不可或缺的,在使用对话框的时候 ... -
AlertDialog中获取自定义控件
2011-11-27 13:16 6626最近写了一个自定义布局的Dialog,运行效果如下: ... -
ListView
2011-11-24 19:53 1191由于手机屏幕尺寸的原因以及手指触屏操作的特性,List ...
相关推荐
encryption for lightweigth device
主要完成手机背景的定时切换功能,根据你选择的图片完成每天背景的切换
android : 四大组件(activity、service、broadcase receiver、content provider)和五大布局(LinearLayout、FrameLayout、RelativeLayout、AbsoluteLayout、TableLayout) 还有 java iOS : xib/storyboard + oc web...
广播 JS SDK 用于发布和播放的 JavaScript SDK。 安装 < script src =" //cdn.cine.io/cineio-broadcast.js " > </ script > 用法 CineIO对象具有三个主要方法。... 使用您的公钥初始化 CineIO jssdk。...
22、简要解释一下activity、 intent 、intent filter、service、Broadcase、BroadcaseReceiver 答:activity呈现了一个用户可以操作的可视化用户界面 service不包含可见的用户界面,而是在后台无限地运行可以连接到...
(Activity,Service,BroadCase,ContentProvider) 的存在情况打印到当前目录的activity.txt文件中 然后进入打印文件搜索: ACTIVITY MANAGER ACTIVITIES (dumpsys activity activities) 补充知识:打开另一个...
androidalarm:广播Broadcase 服务service,活动activity gesture:手势滑动实别,手势交互 时间控件 button,list,surfaceive绘图 菜单:上下文菜单,自定义菜单 对话框:多按钮,列表、单选、多选、进度、读取中、...
This reference guide provides the basics of MPEG-2 and digital broadcase transmission. I am sure it is the best ever material in this field!
从vue1.x过来的都知道,在vue2.0中,父子组件间事件通信的$dispatch和$broadcase被移除了。官方考虑是基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会变得越来越脆落。特别是在组件...
里面包含了安卓开发中常用到的广播集合,很有用的,可以下来看看