zoukankan      html  css  js  c++  java
  • ANDROID_MARS学习笔记_S01原始版_017_绑定SERVICE

    一、流程

    1.编写service,重写onBind(Intent intent),返回自定义的Binder

    2.自写义Binder,提供一个可访问的方法,以传递数据

    3.点击界面按钮会开启service,过程为,通过Intent的setClass指定要开启的service,再通过bindService(intent, conn, BIND_AUTO_CREATE);开启service,其中参数conn是ServiceConnection,需要实现它的onServiceConnected(ComponentName name, IBinder service),service开启成功后,会回调这个函数,会把binder传给参数IBinder,从而实现数据传递,这就是所谓的给service提供了client-server模式

    二、代码
    1.xml
    (1)activity_main.xml

     1 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
     2     xmlns:tools="http://schemas.android.com/tools"
     3     android:layout_width="match_parent"
     4     android:layout_height="match_parent"
     5     android:paddingBottom="@dimen/activity_vertical_margin"
     6     android:paddingLeft="@dimen/activity_horizontal_margin"
     7     android:paddingRight="@dimen/activity_horizontal_margin"
     8     android:paddingTop="@dimen/activity_vertical_margin"
     9     tools:context="com.service2.MainActivity" >
    10 
    11     <Button
    12         android:id="@+id/bindBtn"
    13         android:layout_width="wrap_content"
    14         android:layout_height="wrap_content"
    15         android:text="完成绑定操作" />
    16 
    17 </RelativeLayout>

    (2)AndroidManifest.xml

     1 <?xml version="1.0" encoding="utf-8"?>
     2 <manifest xmlns:android="http://schemas.android.com/apk/res/android"
     3     package="com.service2"
     4     android:versionCode="1"
     5     android:versionName="1.0" >
     6 
     7     <uses-sdk
     8         android:minSdkVersion="8"
     9         android:targetSdkVersion="21" />
    10 
    11     <application
    12         android:allowBackup="true"
    13         android:icon="@drawable/ic_launcher"
    14         android:label="@string/app_name"
    15         android:theme="@style/AppTheme" >
    16         <activity
    17             android:name=".MainActivity"
    18             android:label="@string/app_name" >
    19             <intent-filter>
    20                 <action android:name="android.intent.action.MAIN" />
    21 
    22                 <category android:name="android.intent.category.LAUNCHER" />
    23             </intent-filter>
    24         </activity>
    25         <service android:name=".SecondService"></service>
    26     </application>
    27 
    28 </manifest>

    2.java
    (1)MainActivity.java

     1 package com.service2;
     2 
     3 import android.app.Activity;
     4 import android.content.ComponentName;
     5 import android.content.Intent;
     6 import android.content.ServiceConnection;
     7 import android.os.Bundle;
     8 import android.os.IBinder;
     9 import android.view.View;
    10 import android.view.View.OnClickListener;
    11 import android.widget.Button;
    12 
    13 import com.service2.SecondService.FirstBinder;
    14 
    15 public class MainActivity extends Activity {
    16 
    17     private Button bindBtn = null;
    18     @Override
    19     protected void onCreate(Bundle savedInstanceState) {
    20         super.onCreate(savedInstanceState);
    21         setContentView(R.layout.activity_main);
    22         bindBtn = (Button)findViewById(R.id.bindBtn);
    23         bindBtn.setOnClickListener(new OnClickListener() {
    24             @Override
    25             public void onClick(View v) {
    26                 Intent intent = new Intent();
    27                 intent.setClass(MainActivity.this, SecondService.class);
    28                 bindService(intent, conn, BIND_AUTO_CREATE);
    29             }
    30         });
    31     }
    32     
    33     ServiceConnection conn = new ServiceConnection() {
    34         @Override
    35         public void onServiceDisconnected(ComponentName name) {
    36             System.out.println("onServiceDisconnected>>>>>>");
    37         }
    38         @Override
    39         public void onServiceConnected(ComponentName name, IBinder service) {
    40             FirstBinder binder = (FirstBinder)service;
    41             System.out.println("onServiceConnected>>>>>"+binder.getData());
    42         }
    43     };
    44 }

    (2)SecondService.java

     1 package com.service2;
     2 
     3 import android.app.Service;
     4 import android.content.Intent;
     5 import android.os.Binder;
     6 import android.os.IBinder;
     7 
     8 public class SecondService extends Service {
     9 
    10     @Override
    11     public IBinder onBind(Intent intent) {
    12         IBinder binder = new FirstBinder();
    13         return binder;
    14     }
    15 
    16     class FirstBinder extends Binder {
    17         public String getData() {
    18             return "test data";
    19         }
    20     }
    21 }
  • 相关阅读:
    聊一聊-JAVA 泛型中的通配符 T,E,K,V,?
    leetcode刷到的大牛思路记录
    leetcode树有关题目随笔
    SpringMVC Controller介绍及常见注解
    一个方法团灭 6 道股票问题
    IDEA中Update resources和Update classes and resources、Redeploy、Restart server的区别
    动态规划规律总结
    mapPartitions
    RDD的依赖关系
    foreachPartition来写数据库
  • 原文地址:https://www.cnblogs.com/shamgod/p/5193248.html
Copyright © 2011-2022 走看看