ANDROID_MARS学习笔记_S01原始版_019_SERVICE之Transact
一、代码
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.transact.MainActivity" > 10 11 <Button 12 android:id="@+id/btn1" 13 android:layout_width="wrap_content" 14 android:layout_height="wrap_content" 15 android:text="绑定" /> 16 <Button 17 android:id="@+id/btn2" 18 android:layout_width="wrap_content" 19 android:layout_height="wrap_content" 20 android:text="发送请求" 21 android:layout_below="@id/btn1"/> 22 23 </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.transact" 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=".ThirdService"></service> 26 </application> 27 28 </manifest>
2.java
(1)MainActivity.java
1 package com.transact; 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.Binder; 8 import android.os.Bundle; 9 import android.os.IBinder; 10 import android.os.Parcel; 11 import android.os.RemoteException; 12 import android.view.View; 13 import android.view.View.OnClickListener; 14 import android.widget.Button; 15 16 public class MainActivity extends Activity { 17 18 private Button btn1,btn2; 19 private Binder binder; 20 @Override 21 protected void onCreate(Bundle savedInstanceState) { 22 super.onCreate(savedInstanceState); 23 setContentView(R.layout.activity_main); 24 btn1 = (Button) findViewById(R.id.btn1); 25 btn2 = (Button) findViewById(R.id.btn2); 26 btn1.setOnClickListener(new OnClickListener() { 27 @Override 28 public void onClick(View v) { 29 Intent intent = new Intent(); 30 intent.setClass(MainActivity.this, ThirdService.class); 31 bindService(intent, conn, BIND_AUTO_CREATE); 32 } 33 }); 34 35 btn2.setOnClickListener(new OnClickListener() { 36 @Override 37 public void onClick(View v) { 38 Parcel data = Parcel.obtain(); 39 Parcel reply = Parcel.obtain(); 40 data.writeString("data from activity"); 41 try { 42 //Transact()会等待service的onTransact()方法往reply写数据,service的onTransact()执行完后会返回这里 43 binder.transact(0, data, reply, 0); 44 System.out.println("activity's replya data -->"+reply.readString()); 45 } catch (RemoteException e) { 46 e.printStackTrace(); 47 } 48 } 49 }); 50 } 51 52 ServiceConnection conn = new ServiceConnection() { 53 @Override 54 public void onServiceDisconnected(ComponentName name) { 55 56 } 57 58 @Override 59 public void onServiceConnected(ComponentName name, IBinder service) { 60 MainActivity.this.binder = (Binder) service; 61 } 62 }; 63 }
(2)ThirdService.java
1 package com.transact; 2 3 import android.app.Service; 4 import android.content.Intent; 5 import android.os.Binder; 6 import android.os.IBinder; 7 import android.os.Parcel; 8 import android.os.RemoteException; 9 10 public class ThirdService extends Service { 11 12 @Override 13 public IBinder onBind(Intent intent) { 14 return new MyBinder(); 15 } 16 17 class MyBinder extends Binder { 18 @Override 19 protected boolean onTransact(int code, Parcel data, Parcel reply, 20 int flags) throws RemoteException { 21 System.out.println("code---->"+code); 22 System.out.println("flags---->"+flags); 23 System.out.println("data---->"+data.readString()); 24 reply.writeString("add data from thirdService"); 25 return super.onTransact(code, data, reply, flags); 26 } 27 } 28 }
You can do anything you set your mind to, man!