• 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 }
  • 相关阅读:
    解决android Failed to rename directory 问题
    Android APK反编译
    SQL的bit列名转换成access是/否数据类型,True无效的问题
    android获取屏幕硬件分辨率方法
    cursor:hand 与 cursor:pointer 的区别
    解决android调试是出现:Reinstallation failed due to different application signatures
    Flash as3 基础:AS3中的getChildByName(转)
    机器学习之特征预处理
    用户态和内核态的区别
    深度学习和神经网络的区别(转载)
  • 原文地址:https://www.cnblogs.com/labixiaoxin/p/4950354.html
Copyright © 2020-2023  润新知