位置: 编程技术 - 正文

Activity和Service交互(service与activity数据交互)

编辑:rootadmin

推荐整理分享Activity和Service交互(service与activity数据交互),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:service与activity的区别,activity service,activity和service绑定,activity和service绑定,安卓activity和service,activity和application,activity和application,activity和service绑定,内容如对您有帮助,希望把文章链接给更多的朋友!

Activity和Service交互

本人常用的三种,不足之处希望大家多多提出宝贵意见

第一种Handler:

Activity

import android.annotation.SuppressLint;import android.app.Activity;import android.content.Intent;import android.os.Bundle;import android.os.Handler;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;import com.service.MsghdSeceiver;public class MainHandlerActivity extends Activity { private ProgressBar mProgressBar; private Button btn; private Intent intent; @SuppressLint("HandlerLeak") Handler handler = new Handler() { public void handleMessage(android.os.Message msg) { if (msg.what == 0x) { // 拿到进度,更新UI int progress = (int) msg.obj; mProgressBar.setProgress(progress); } }; }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_handler); mProgressBar = (ProgressBar) findViewById(R.id.pb_mainhd_jindu); btn = (Button) findViewById(R.id.btn_mainhd_btn); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); MsghdSeceiver.setHandler(handler); // 启动服务 intent = new Intent("com.example.communication.MSG_ACTIONhd"); } @Override protected void onResume() { super.onResume(); setListener(); } private void setListener() { btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { startService(intent); } }); } @Override protected void onDestroy() { // 停止服务 stopService(intent); super.onDestroy(); }}

Service

import android.app.Service;import android.content.Intent;import android.os.Handler;import android.os.IBinder;import android.os.Message;public class MsghdSeceiver extends Service { /** * 进度条的最大&#; */ public static final int MAX_PROGRESS = ; /** * 进度条的进度&#; */ private int progress = 0; private static Handler handlers; public static void setHandler(Handler handler) { handlers = handler; } @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); startDownLoad(); } /** * 模拟下载任务,每秒钟更新一次 */ public void startDownLoad() { new Thread(new Runnable() { @Override public void run() { while (progress < MAX_PROGRESS) { progress &#;= ; Message message = new Message(); message.what = 0x; message.obj = progress; handlers.sendMessage(message); // Message.obtain(handlers, 0x, progress).sendToTarget(); try { Thread.sleep(); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; }}

注意

<service android:name="com.service.MsghdSeceiver" android:exported="false" > <intent-filter> <action android:name="com.example.communication.MSG_ACTIONhd" /> </intent-filter> </service>

第二种接口:

Activity

import android.app.Activity;import android.content.ComponentName;import android.content.Intent;import android.content.ServiceConnection;import android.os.Bundle;import android.os.IBinder;import android.view.View;import android.view.View.OnClickListener;import android.widget.Button;import android.widget.ProgressBar;import com.OnProgressListener;import com.service.MsgService;public class MainActivity extends Activity { private MsgService msgService; private ProgressBar mProgressBar; private Button btn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mProgressBar = (ProgressBar) findViewById(R.id.pb_main_jindu); btn = (Button) findViewById(R.id.btn_main_btn); } @Override protected void onStart() { // TODO Auto-generated method stub super.onStart(); // 绑定Service 需要注册<action // android:name="com.example.communication.MSG_ACTION" /> Intent intent = new Intent("com.example.communication.MSG_ACTION"); bindService(intent, conn, BIND_AUTO_CREATE); } @Override protected void onResume() { // TODO Auto-generated method stub super.onResume(); setListener(); } private void setListener() { // TODO Auto-generated method stub btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { // TODO Auto-generated method stub msgService.startDownLoad(); } }); } ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName arg0) { // TODO Auto-generated method stub msgService = null; } @Override public void onServiceConnected(ComponentName name, IBinder service) { // 返回一个MsgService对象 msgService = ((MsgService.MsgBinder) service).getService(); // 注册回调接口来接收下载进度的变化 msgService.setOnProgressListener(new OnProgressListener() { @Override public void onProgress(int progress) { // TODO Auto-generated method stub mProgressBar.setProgress(progress); } }); } }; @Override protected void onDestroy() { unbindService(conn); super.onDestroy(); }}

Activity和Service交互(service与activity数据交互)

Service

import android.app.Service;import android.content.Intent;import android.os.Binder;import android.os.IBinder;import com.OnProgressListener;public class MsgService extends Service { /** * 进度条的最大&#; */ public static final int MAX_PROGRESS = ; /** * 进度条的进度&#; */ private int progress = 0; /** * 更新进度的回调接口 */ private OnProgressListener onProgressListener; /** * 注册回调接口的方法,供外部调用 * * @param onProgressListener */ public void setOnProgressListener(OnProgressListener onProgressListener) { this.onProgressListener = onProgressListener; } /** * 增加get()方法,供Activity调用 * * @return 下载进度 */ public int getProgress() { return progress; } /** * 模拟下载任务,每秒钟更新一次 */ public void startDownLoad() { new Thread(new Runnable() { @Override public void run() { // TODO Auto-generated method stub while (progress < MAX_PROGRESS) { progress &#;= ; // 进度发生变化通知调用方 if (onProgressListener != null) { onProgressListener.onProgress(progress); } try { Thread.sleep(); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } /** * 返回一个Binder对象 */ @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return new MsgBinder(); } public class MsgBinder extends Binder { /** * 获取当前Service的实例 * * @return */ public MsgService getService() { return MsgService.this; } }}

接口

public interface OnProgressListener { void onProgress(int progress);}

注意

<service android:name="com.service.MsgService" android:exported="false" > <intent-filter> <action android:name="com.example.communication.MSG_ACTION" /> </intent-filter> </service>

第三种广播:

Activityimport 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.ProgressBar;public class MainGbActivity extends Activity { private ProgressBar mProgressBar; private Button btn; private Intent mIntent; private MsgReceiver msgReceiver; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main_gb); mProgressBar = (ProgressBar) findViewById(R.id.pb_maingb_jindu); btn = (Button) findViewById(R.id.btn_maingb_btn); } @Override protected void onStart() { super.onStart(); // 启动服务 mIntent = new Intent("com.example.communication.MSG_ACTIONs"); // 动态注册广播接收器 msgReceiver = new MsgReceiver(); IntentFilter intentFilter = new IntentFilter(); intentFilter.addAction("com.example.communication.RECEIVER"); registerReceiver(msgReceiver, intentFilter); } @Override protected void onResume() { super.onResume(); setListener(); } private void setListener() { btn.setOnClickListener(new OnClickListener() { @Override public void onClick(View arg0) { startService(mIntent); } }); } /** * 广播接收器 * */ public class MsgReceiver extends BroadcastReceiver { @Override public void onReceive(Context arg0, Intent intent) { // 拿到进度,更新UI int progress = intent.getIntExtra("progress", 0); mProgressBar.setProgress(progress); } } @Override protected void onDestroy() { super.onDestroy(); // 停止服务 stopService(mIntent); // 注销广播 unregisterReceiver(msgReceiver); }}

Service

import android.app.Service;import android.content.Intent;import android.os.IBinder;public class MsggbSeceiver extends Service { /** * 进度条的最大&#; */ public static final int MAX_PROGRESS = ; /** * 进度条的进度&#; */ private int progress = 0; private Intent intent = new Intent("com.example.communication.RECEIVER"); /** * 模拟下载任务,每秒钟更新一次 */ public void startDownLoad() { new Thread(new Runnable() { @Override public void run() { while (progress < MAX_PROGRESS) { progress &#;= ; // 发送Action为com.example.communication.RECEIVER的广播 intent.putExtra("progress", progress); sendBroadcast(intent); try { Thread.sleep(); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { // TODO Auto-generated method stub startDownLoad(); return super.onStartCommand(intent, flags, startId); } @Override public IBinder onBind(Intent arg0) { // TODO Auto-generated method stub return null; }}

注意

<service android:name="com.service.MsggbSeceiver" android:exported="false" > <intent-filter> <action android:name="com.example.communication.MSG_ACTIONs" /> </intent-filter> </service>

布局一样

<RelativeLayout xmlns:android=" xmlns: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.activity.MainActivity$PlaceholderFragment" > <ProgressBar android:id="@&#;id/pb_mainhd_jindu" style="?android:attr/progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" /> <Button android:id="@&#;id/btn_mainhd_btn" android:layout_marginTop="dp" android:text="HandlerService" android:layout_below="@id/pb_mainhd_jindu" android:layout_width="match_parent" android:layout_height="wrap_content" /></RelativeLayout>

注解差不多都了,一看就应该懂,最好写一下,记忆会深点

Android手机实时视频监控 最近手机安装了一个千里和千里家居远程监控的应用,对里面的实时监控交通路口的状态有点好奇。以是使用相应的方法反编译看看她的原理。对于软

解决“Cannot merge new index into a non-jumbo instruction”的问题 在将ADT和SDKTool升级到最新(分别是.1和.0.1)之后,我的一个工程(相对比较大)在编译并运行的时候,出现错误,Eclipse控制台输出如下信息:Unableto

android 功能引导界面实现 一.界面实现:借鉴了别人的实例,然后记录下引导界面的实现,总体来说实现不算困难,前提是要有个美工帮你做这些引导图片(找了张图片凑合用吧

标签: service与activity数据交互

本文链接地址:https://www.jiuchutong.com/biancheng/381062.html 转载请保留说明!

上一篇:Fragment里面嵌套ViewPager(fragment中嵌套fragment)

下一篇:Android手机实时视频监控(安卓实时屏幕)

  • 投资性房地产采用成本模式计量
  • 未完工程如何处理
  • 怎么查纳税人信用等级
  • 系统集成 税点
  • 费用会计具体工作总结
  • 手撕汽车票在哪里弄到
  • 年终奖如何合理发放
  • 应交税费应交增值税减免税款
  • 劳务公司的暂估费是什么
  • 应收款确认坏账分录
  • 企业计提预提费用的会计分录如何编制?
  • 发给一个人的说说
  • 2020年税收分类编码定义查询
  • 印花税税目错了能申报更正吗
  • 调用核心征管失败是什么意思
  • 开发商开临时发票
  • 最新《资源税纳税标准
  • 租用仓库需要代扣代缴企业所得税吗
  • 合同到期退房子,租金退吗
  • 供应商把价格算错了怎么办
  • 未担保余值是什么意思
  • 公户没有开票进账了可以吗
  • 一般纳税人申报哪些税种
  • 个体工商户公转私用途写什么
  • linux如何将命令结果输出到文件
  • 职工教育经费包括餐费吗
  • 无形资产摊销是什么科目
  • 辞退补偿金额怎么做账
  • 残保金的会计处理
  • php框架怎么用
  • 训练自己的GPT
  • react错误处理
  • php支付接口对接教程
  • filezilla使用手册
  • 企业收到发票冲销怎么办
  • 租房开的发票收的税怎么做账?
  • 工程款发票的数量和单价
  • 工会收支账务处理
  • 企业研发费用可以抵税吗
  • 所得税视同销售行为有哪些呢?
  • 季中转一般纳税人申报了小规模后无法勾选认证
  • 工程行业预交税款怎么算
  • 政府奖励收入会计分录
  • 商品入库进项税不抵扣会计分录
  • 办公室装修用什么材料便宜
  • 发票上的货物要怎么填?
  • 企业成本计算的依据是什么
  • 销售返现如何做账务处理
  • 专利权摊销如何计算
  • 非营利组织相关论文
  • 生育保险基金的筹集原则是
  • 商业承兑汇票如何承兑?
  • 投资子公司亏损母公司报表怎么做
  • 收到合同预付款在账上怎么记
  • 关于单独计价的规定
  • 营改增一般纳税人标准
  • 做账工资和申报工资不一样
  • 累计折旧减少记哪方
  • MySQL ERROR 1045 (28000) 错误的解决办法
  • sql server数据库字段类型
  • 服务器文件夹共享分组
  • xp系统怎么升级版本
  • windows2003 IIS6.0 asp配置技巧
  • ubuntu系统怎样
  • os x10.11el capitan beta4更新了什么?os x10.11el capitan beta4下载地址
  • linux中管道
  • 晚上睡觉艾草贴肚脐
  • 在机上创建一个文件夹
  • 简单实现多彩慕斯蛋糕淋面的方法
  • jquery移动div到另一个div中
  • node-red 全局变量
  • js小数计算精度问题
  • jquery设置图片大小
  • python socket传输文字到网页
  • unity3d武器模型
  • shader能做什么
  • js全局变量怎么定义
  • 小规模开了红字发票申报表怎么填
  • 印花税为什么不计入资产成本
  • 地税局下属单位
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设