我们建立一个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();
}
}
- 浏览: 973822 次
最新评论
-
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 1445例子一: sublayout.xml <?xml v ... -
android: 横竖屏切换总结-布局改变和数据保存
2012-11-04 21:44 13393目录:引言一、布局问题二、重新载入问题 三、Q:横竖屏生命 ... -
android中各种颜色在drawable.xml的值
2012-07-23 15:41 1345< drawable name="white ... -
MeasureSpec介绍及使用详解(转)
2012-06-10 22:01 1144一个MeasureSpec封装了父布局传递给子布局的布 ... -
GestureDetector和SimpleOnGestureListener的使用教程
2012-06-10 20:50 11951. 当用户触摸屏幕的时候,会产生许多手势,例如down, ... -
android UI进阶之实现listview的下拉加载
2012-06-10 10:01 3838关于listview的操作五花八门,有下拉刷新,分级显 ... -
ViewGroup布局
2012-05-29 12:20 1405viewgroup简单说就是可以装view的vi ... -
自定义Android ListView控件:ExpandableListView
2012-04-21 00:01 4949public class Main extends L ... -
浅谈android的selector背景选择器
2012-02-25 09:07 1007关于listview和button都要改变androi ... -
Android 列表之分组ListView
2011-11-30 15:26 14322运行效果: main.xml Java代码 ... -
ListView 选中字体变大
2011-11-30 15:20 1835目标:listview中item使用textview,当ite ... -
ListView 常用方法
2011-11-27 15:56 1223①.使用listView或者gridView时,当列 ... -
Dialog
2011-11-27 13:27 1247对话框是Android中不可或缺的,在使用对话框的时候 ... -
AlertDialog中获取自定义控件
2011-11-27 13:16 6700最近写了一个自定义布局的Dialog,运行效果如下: ... -
ListView
2011-11-24 19:53 1253由于手机屏幕尺寸的原因以及手指触屏操作的特性,List ...
相关推荐
在Android系统中,服务(Service)和广播接收者(BroadcastReceiver)是两个核心组件,它们在后台执行任务和实现跨应用程序通信。本教程将深入探讨如何利用这两种组件来实现手机背景的定时切换功能,比如根据用户...
摘要:本文主要关注的是在轻量级设备上实现的属性基广播加密(Attribute-Based Broadcast Encryption,简称ABBE)方案。这种加密技术对于智能卡、付费电视顶盒、SIM卡与智能手机等设备的安全应用至关重要。...
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绘图 菜单:上下文菜单,自定义菜单 对话框:多按钮,列表、单选、多选、进度、读取中、...
- 权限描述:允许应用更新收集的电池统计信息。 - 使用场景:适用于电池管理应用、性能监测工具等。 8. **BLUETOOTH & BLUETOOTH_ADMIN** - 权限描述: - **BLUETOOTH**:允许应用连接已配对的蓝牙设备。 - **...
从vue1.x过来的都知道,在vue2.0中,父子组件间事件通信的$dispatch和$broadcase被移除了。官方考虑是基于组件树结构的事件流方式实在是让人难以理解,并且在组件结构扩展的过程中会变得越来越脆落。特别是在组件...
TelephonyManager tManager = (TelephonyManager) context.getSystemService(Service.TELEPHONY_SERVICE); switch (tManager.getCallState()) { case TelephonyManager.CALL_STATE_RINGING: mIncomingNumber = ...
"运算机网络基础知识" 一、什么是网络? 网络是指在必然区域内将两台或两台以上的运算机以必然的方式连接起来,起到共享文件、程序、数据的...4. 广播域(Broadcase Domain):发送数据给一个不明确的目标所阻碍的范围