Activity与Service数据交互:Binder、bindService的用法

 1 package com.lixu.jiaohu;
 2
 3 import com.lixu.jiaohu.MyAppService.Mybind;
 4
 5 import android.app.Activity;
 6 import android.app.Service;
 7 import android.content.ComponentName;
 8 import android.content.Intent;
 9 import android.content.ServiceConnection;
10 import android.os.Bundle;
11 import android.os.IBinder;
12 import android.view.Menu;
13 import android.view.MenuItem;
14 import android.view.View;
15 import android.view.View.OnClickListener;
16 import android.widget.Button;
17 import android.widget.Toast;
18
19 public class MainActivity extends Activity implements OnClickListener {
20     private ServiceConnection sc;
21     private MyAppService mMyAppService;
22
23     @Override
24     protected void onCreate(Bundle savedInstanceState) {
25         super.onCreate(savedInstanceState);
26         setContentView(R.layout.activity_main);
27
28         Button btn1 = (Button) findViewById(R.id.button1);
29         Button btn2 = (Button) findViewById(R.id.button2);
30         Button btn3 = (Button) findViewById(R.id.button3);
31
32         btn1.setOnClickListener(this);
33         btn2.setOnClickListener(this);
34         btn3.setOnClickListener(this);
35         // 建立service连接
36         sc = new ServiceConnection() {
37
38             @Override
39             public void onServiceDisconnected(ComponentName name) {
40
41             }
42
43             @Override
44             public void onServiceConnected(ComponentName name, IBinder service) {
45                 Mybind mMybind = (Mybind) service;
46                 mMyAppService = mMybind.getService();// 获取MyAppService的对象
47             }
48         };
49     }
50
51     @Override
52     public void onClick(View v) {
53         switch (v.getId()) {
54         case R.id.button1:
55             startService();
56             break;
57         case R.id.button2:
58             bindService();
59             break;
60         case R.id.button3:
61             String str = mMyAppService.getServiceValue();
62             Toast.makeText(this, str, 0).show();
63             break;
64         default:
65             break;
66         }
67
68     }
69
70     public void startService() {
71         mMyAppService.setServiceValue("你是:");// 设置MyAppService里面的公共变量的值
72         Intent intent = new Intent(this, MyAppService.class);
73         startService(intent);
74     }
75
76     public void bindService() {
77         Intent it = new Intent(this, MyAppService.class);
78         bindService(it, sc, Service.BIND_AUTO_CREATE);// 建立service的bind连接
79     }
80
81     @Override
82     protected void onDestroy() {
83         super.onDestroy();
84         Intent it = new Intent(this, MyAppService.class);
85         stopService(it);// 关闭服务
86     }
87
88 }
 1 package com.lixu.jiaohu;
 2
 3 import android.app.Service;
 4 import android.content.Intent;
 5 import android.os.Binder;
 6 import android.os.IBinder;
 7 import android.util.Log;
 8
 9 public class MyAppService extends Service {
10     private String str;
11
12     @Override
13     public void onCreate() {
14         Log.e("MyAppService", "onCreate开始了");
15         super.onCreate();
16     }
17
18     @Override
19     public int onStartCommand(Intent intent, int flags, int startId) {
20         str = str + "宝儿";
21         return super.onStartCommand(intent, flags, startId);
22     }
23
24     // Activity bindService()方法开启后进入执行onBind方法
25     @Override
26     public IBinder onBind(Intent intent) {
27
28         return new Mybind();
29     }
30
31     public String getServiceValue() {
32         return str;
33     }
34
35     public void setServiceValue(String str) {
36         this.str = str;
37     }
38
39     public class Mybind extends Binder {
40         public MyAppService getService() {
41             return MyAppService.this;
42
43         }
44     }
45
46     @Override
47     public boolean onUnbind(Intent intent) {
48         // TODO Auto-generated method stub
49         return super.onUnbind(intent);
50     }
51
52 }
时间: 2024-10-14 15:14:03

Activity与Service数据交互:Binder、bindService的用法的相关文章

Android情景案例——Activity与Service通讯交互

前两天去面试,遇到这个知识点,感觉组织的不是很清晰,所以事后梳理下逻辑. 一.案例情景 在service中开启一个下载任务,然后在activity中显示下载进度,如何实现? 分析: 这里考察的就是Service如何与Activity进行交互,我们知道开启一个Service服务有两种方法,startService().bindService().第一种方法我们直接开启Service进行使用,没有与它进行交互处理.所以我们只有通过bindService()方法然后借助Binder进行数据交互. 方案

android activity和service的交互介绍

android开发中,作为4大组件的service在开发中经常会使用到.很多时候,我们的activity和service之间需要进行相应的交互,activity需要调用service里面的方法实现某些功能,service需要调用activity的方法,实现界面更新等的交互. 实现2者之间相互交互的主要方式是:service中有个类部类继承Binder,然后提供一个公有方法,返回当前service的实例. activity通过bindService来开启一个service,service通过onB

Android进阶之Fragment与Activity之间的数据交互

1 为什么 因为Fragment和Activity一样是具有生命周期,不是一般的bean通过构造函数传值,会造成异常. 2 Activity把值传递给Fragment 2.1 第一种方式,也是最常用的方式,就是使用Bundle来传递参数 (1)宿主Activity/FragmentAdapter中: Bundle bundle = new Bundle(); bundle.putString(Constant.INTENT_ID, productId); Fragment fragment =

Android基础笔记(十一)- Service基础和注意事项以及Activity与Service的通信

Service的基本概念 为什么要有Service Service的基本用法 电话窃听器的小案例 Service和Activity通信 Service和Thread的关系 向光明而行! Service的基本概念 Service是Android的四大组件之一,在每一个应用程序中都扮演者非常重要的角色. 它主要用于在后台处理一些耗时的逻辑,或者去执行某些需要长期运行的任务.必要的时候,我们甚至可以在程序退出的情况下,让Service在后台继续保持运行状态. 既然都是被用于处理耗时的操作,那么我们什么

8.1.2 绑定Activity和Service

8.1.2 绑定Activity和Service 2010-06-21 16:57 李宁 中国水利水电出版社 字号:T | T <Android/OPhone开发完全讲义>第8章Android服务,本章主要介绍了Android系统 中的服务(Service)技术.Service是Android中4个应用程序组件之一.在Android系统内部提供了很多的系统服务,通过这些系统 服务,可以实现更为复杂的功能,例如,监听来电.重力感应等.本节为大家介绍绑定Activity和Service. AD:

Android学习系列之(五)Activity之间的数据传递

前言:前面我们已经掌握了 Activity 的基本使用,但是那都是在同一个 Activity 中进行操作的.那么若我们要在不同 Activity 之间进行数据交互,这又如何实现?那现在我们依旧以模拟登录注册这一个例子来进行说明 一.需求说明: 模拟用户的登录注册行为,用户注册信息后,将注册时的账号.密码这一数据传递到登陆界面. 二.代码实现: 1.布局文件代码: activity_main.xml: <?xml version="1.0" encoding="utf-8

Activity与Service进行数据交互

Android启动Service有两种方法,一种是startService,一种是bindService.生命周期如下: 执行startService时,调用者如果没有stopService,Service会一直在后台运行.多次调用startService,该Service只能被创建一次,即该Service的onCreate方法只会被调用一次.但是每次调用startService,onStartCommand方法都会被调用. 执行bindService时,调用者调用unbindService方法

Android四大组件应用系列——Activity与Service交互实现APK下载

Servic与Activity相比它没有界面,主要是在后台执行一些任务,Service有两种启动方法startService()和bindService(),startService方式Service不可交互,可一直在后台即便应用结束,bindService方式可通过ServiceConnection获得运行的Service实例的方式实现Activity和Service之间的交互,通常Activity退出则绑定的服务也就取消了.我们可以通过同时执行启动服务和绑定服务的方式实现Service交互同

android实现两个activity数据交互

android如何实现两个Activity数据交互?主要是根据Intent的携带功能,intent可以携带很多信息,比如Bundle,URI甚至对象(此时要序列化,并且对象里面的成员变量如果是对象,也要序列化),实现的具体代码如下: package com.example.yzj.android_8_3; import android.content.Intent; import android.net.Uri; import android.support.v7.app.AppCompatAc