Android Activity与Service间的通讯之一(回调函数)
来源:互联网 发布:xp系统禁止安装软件 编辑:程序博客网 时间:2024/05/22 03:43
import android.app.Service; import android.content.Intent; import android.os.Binder; import android.os.IBinder; public class MsgService extends Service { /** * 进度条的最大值 */ public static final int MAX_PROGRESS = 100; /** * 进度条的进度值 */ 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() { while(progress < MAX_PROGRESS){ progress += 5; //进度发生变化通知调用方 if(onProgressListener != null){ onProgressListener.onProgress(progress); } try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } } } }).start(); } /** * 返回一个Binder对象 */ @Override public IBinder onBind(Intent intent) { return new MsgBinder(); } public class MsgBinder extends Binder{ /** * 获取当前Service的实例 * @return */ public MsgService getService(){ return MsgService.this; } } }
<pre name="code" class="java">package com.example.communication; import android.app.Activity; import android.content.ComponentName; import android.content.Context; 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; public class MainActivity extends Activity { private MsgService msgService; private ProgressBar mProgressBar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //绑定Service Intent intent = new Intent("com.example.communication.MSG_ACTION"); bindService(intent, conn, Context.BIND_AUTO_CREATE); mProgressBar = (ProgressBar) findViewById(R.id.progressBar1); Button mButton = (Button) findViewById(R.id.button1); mButton.setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { //开始下载 msgService.startDownLoad(); } }); } ServiceConnection conn = new ServiceConnection() { @Override public void onServiceDisconnected(ComponentName name) { } @Override public void onServiceConnected(ComponentName name, IBinder service) { //返回一个MsgService对象 msgService = ((MsgService.MsgBinder)service).getService(); //注册回调接口来接收下载进度的变化 msgService.setOnProgressListener(new OnProgressListener() { @Override public void onProgress(int progress) { mProgressBar.setProgress(progress); } }); } }; @Override protected void onDestroy() { unbindService(conn); super.onDestroy(); } }
新建一个回调接口:
public interface OnProgressListener {void onProgress(int progress);}
Activity调用bindService (Intent service, ServiceConnection conn, int flags)方法,得到Service对象的一个引用,这样Activity可以直接调用到Service中的方法,如果要主动通知Activity,我们可以利用回调方法。
0 0
- Android Activity与Service间的通讯之一(回调函数)
- Android中Activity与Service的双向通讯
- Android Service 与Activity之间的通讯方式
- Android Activity与Service的AIDL接口通讯
- Service的使用(二)之与activity的通讯
- Service与Activity之间的通讯(二)
- Activity与Service之间的通讯机制
- android service和activity的通讯
- activity与状态相关的回调函数
- Android用回调函数实现Service中更新Activity进度条
- Android--activity配置与activity之间的通讯(一)
- Activity 回调函数
- Android 使用Socket实现服务器与手机客户端的长连接四:使用回调函数与Service调用
- Android情景案例——Activity与Service通讯交互
- DLL与EXE之间的通讯调用 以及 回调函数的线程执行空间
- android中服务的使用 与 Activity和Service的通讯
- Android中服务(Service)的的生命周期,两种开启服务的方式的不同点,Service与Activity之间的通讯
- android 不同activity切换时它们的回调函数调用逻辑的研究
- 关于oracle读取数据时,自动进行HASH处理的隐含参数:_gby_hash_aggregation_enabled
- 第13周项目1 数据大折腾3
- java中的AES 256算法遇到 Illegal key size or default parameters错的解决办法
- nyoj 915 +-字符串(贪心)
- window 下 go lang 环境变量一键批处理设置
- Android Activity与Service间的通讯之一(回调函数)
- 第七篇 硬件内存资源的获取,解析
- 银行系统的简单问题
- 创建型设计模式:简单工厂模式
- 汉诺塔
- USACO: Barn Repair
- iOS判断是否是表情和邮箱格式的判断
- Adapter深入理解与优化
- mmap设备操作