av一区二区在线观看_亚洲男人的天堂网站_日韩亚洲视频_在线成人免费_欧美日韩精品免费观看视频_久草视

您的位置:首頁(yè)技術(shù)文章
文章詳情頁(yè)

Android IPC機(jī)制ACtivity綁定Service通信代碼實(shí)例

瀏覽:23日期:2022-09-22 11:53:02

Binder通信過(guò)程類似于TCP/IP服務(wù)連接過(guò)程binder四大架構(gòu)Server(服務(wù)器),Client(客戶端),ServiceManager(DNS)以及Binder驅(qū)動(dòng)(路由器)

其中Server,Client,ServiceManager運(yùn)行于用戶空間,驅(qū)動(dòng)運(yùn)行于內(nèi)核空間。這四個(gè)角色的關(guān)系和互聯(lián)網(wǎng)類似:Server是服務(wù)器,Client是客戶終端,SMgr是域名服務(wù)器(DNS),驅(qū)動(dòng)是路由器。

book.java

package com.example.android_binder_testservice;import android.os.Parcel;import android.os.Parcelable;public class Book implements Parcelable { private String bookName; private String author; private int publishDate; public Book() { } public Book(String bookName, String author, int publishDate) { super(); this.bookName = bookName; this.author = author; this.publishDate = publishDate; } public String getBookName() { return bookName; } public void setBookName(String bookName) { this.bookName = bookName; } public String getAuthor() { return author; } public void setAuthor(String author) { this.author = author; } public int getPublishDate() { return publishDate; } public void setPublishDate(int publishDate) { this.publishDate = publishDate; } @Override public int describeContents() { return 0; } @Override public void writeToParcel(Parcel out, int flags) { out.writeString(bookName); out.writeString(author); out.writeInt(publishDate); }public static final Parcelable.Creator<Book> CREATOR = new Creator<Book>() { @Override public Book[] newArray(int size) { return new Book[size]; } @Override public Book createFromParcel(android.os.Parcel source) { return new Book(source); } }; public Book(Parcel in) { bookName = in.readString(); author = in.readString(); publishDate = in.readInt(); }}

上面是一個(gè) 實(shí)現(xiàn)了parcelable的實(shí)體類,就是將book序列化,在putExtra到Service時(shí)會(huì)被寫入內(nèi)存加快程序速度

mainActivity.java

package com.example.android_binder_testservice;import android.os.Bundle;import android.util.Log;import android.app.Activity;import android.content.Intent;import android.view.Menu;import android.view.View;import android.widget.Button;public class MainActivity extends Activity { Button startServiceButton;// 啟動(dòng)服務(wù)按鈕 Button shutDownServiceButton;// 關(guān)閉服務(wù)按鈕 Button startBindServiceButton;// 啟動(dòng)綁定服務(wù)按鈕 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); getWidget(); regiestListener(); } public void getWidget(){ startServiceButton = (Button) findViewById(R.id.startService); startBindServiceButton = (Button) findViewById(R.id.bindService); shutDownServiceButton = (Button) findViewById(R.id.stopService); } public void regiestListener() { startServiceButton.setOnClickListener(startService); shutDownServiceButton.setOnClickListener(shutdownService); startBindServiceButton.setOnClickListener(startBinderService); } /** 啟動(dòng)服務(wù)的事件監(jiān)聽 */ public Button.OnClickListener startService = new Button.OnClickListener() { public void onClick(View view) { /** 單擊按鈕時(shí)啟動(dòng)服務(wù) */ Intent intent = new Intent(MainActivity.this, CountService.class); startService(intent); Log.v('MainStadyServics', 'start Service'); } }; /** 關(guān)閉服務(wù) */ public Button.OnClickListener shutdownService = new Button.OnClickListener() { public void onClick(View view) { /** 單擊按鈕時(shí)啟動(dòng)服務(wù) */ Intent intent = new Intent(MainActivity.this, CountService.class); /** 退出Activity是,停止服務(wù) */ stopService(intent); Log.v('MainStadyServics', 'shutDown serveice'); } }; /** 打開綁定服務(wù)的Activity */ public Button.OnClickListener startBinderService = new Button.OnClickListener() { public void onClick(View view) { /** 單擊按鈕時(shí)啟動(dòng)服務(wù) */ Intent intent = new Intent(MainActivity.this, UseBrider.class); startActivity(intent); Log.v('MainStadyServics', 'start Binder Service'); } };}

mainActivity中當(dāng)使用startService()啟動(dòng)Service時(shí)會(huì)調(diào)用Service的onStartCommand()

當(dāng)使用bindService()則會(huì)調(diào)用onBind()方法,可能會(huì)覺(jué)了看的又看怎么沒(méi)看到bindService()這個(gè)方法呢

重點(diǎn)在

Intent intent = new Intent(MainActivity.this, UseBrider.class);startActivity(intent);

繼續(xù)上代碼

UseBrider.java

/** 通過(guò)bindService和unBindSerivce的方式啟動(dòng)和結(jié)束服務(wù) */public class UseBrider extends FragmentActivity { /** 參數(shù)設(shè)置 */ CountService countService; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(new UseBriderFace(this)); Intent intent = new Intent(UseBrider.this, CountService.class); intent.putExtra('book', new Book('name', 'an', 1999));/** 進(jìn)入Activity開始服務(wù) * conn */ bindService(intent, conn, Context.BIND_AUTO_CREATE); } private ServiceConnection conn = new ServiceConnection() { /* * 這個(gè)方法會(huì)獲取到CountService的onBind方法中返回的Binder對(duì)象 * 然后就可以對(duì)服務(wù)進(jìn)行某種操作了 */ public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub countService = ((CountService.ServiceBinder) service).getService(); countService.callBack(); } /** 無(wú)法獲取到服務(wù)對(duì)象時(shí)的操作 */ public void onServiceDisconnected(ComponentName name) { // TODO Auto-generated method stub countService = null; } }; protected void onDestroy() { super.onDestroy(); this.unbindService(conn); Log.v('MainStadyServics', 'out'); }}

UseBriderFace.java

public class UseBriderFace extends View{ /**創(chuàng)建參數(shù)*/ public UseBriderFace(Context context){ super(context); } public void onDraw(Canvas canvas){ canvas.drawColor(Color.WHITE);//畫白色背景/**繪制文字*/ Paint textPaint = new Paint(); textPaint.setColor(Color.RED); textPaint.setTextSize(30); canvas.drawText('使用綁定服務(wù)', 10, 30, textPaint); textPaint.setColor(Color.GREEN); textPaint.setTextSize(18); canvas.drawText('使用綁定服務(wù)后,這個(gè)Activity關(guān)閉后', 20, 60, textPaint); canvas.drawText('綁定的服務(wù)也會(huì)關(guān)閉', 5, 80, textPaint); } }

UseBriderFace.java類其實(shí)就是用java定義的布局可以用xml文件代替

countService.java

package com.example.android_binder_testservice;/**引入包*/import android.app.Service;// 服務(wù)的類import android.os.IBinder;import android.os.Parcel;import android.os.RemoteException;import android.os.Binder;import android.content.Intent;import android.util.Log;/** 計(jì)數(shù)的服務(wù) */public class CountService extends Service { private String TAG = CountService.class.getSimpleName(); /** 創(chuàng)建參數(shù) */ boolean threadDisable; int count; Book book;/* * 當(dāng)通過(guò)bindService()啟動(dòng)CountService時(shí)會(huì)調(diào)用這個(gè)方法并返回一個(gè)ServiceBinder對(duì)象 * 這個(gè)Binder對(duì)象封裝著一個(gè)CountService實(shí)例, * 客戶端就可以通過(guò)ServiceBinder對(duì)服務(wù)端進(jìn)行一些操作 */ public IBinder onBind(Intent intent) { Log.i(TAG, 'onBind'); book = intent.getParcelableExtra('book'); return new ServiceBinder(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { Log.i(TAG, 'onStartCommand'); return super.onStartCommand(intent, flags, startId); } @Override public boolean onUnbind(Intent intent) { Log.i(TAG, 'onUnbind'); return super.onUnbind(intent); } @Override public void onRebind(Intent intent) { Log.i(TAG, 'onRebind'); super.onRebind(intent); } public void onCreate() { super.onCreate(); /** 創(chuàng)建一個(gè)線程,每秒計(jì)數(shù)器加一,并在控制臺(tái)進(jìn)行Log輸出 */ new Thread(new Runnable() { public void run() {while (!threadDisable) { try { Thread.sleep(1000); } catch (InterruptedException e) { } count++; Log.v('CountService', 'Count is' + count);} } }).start(); Log.i(TAG, 'onCreate'); } public void onDestroy() { super.onDestroy(); /** 服務(wù)停止時(shí),終止計(jì)數(shù)進(jìn)程 */ this.threadDisable = true; Log.i(TAG, 'onDestroy'); } public int getConunt() { return count; } public void callBack(){ Log.i(TAG, 'hello,i am a method of CountService'); } class ServiceBinder extends Binder { public CountService getService() { return CountService.this; } }}

代碼解釋有了,想不出來(lái)了

源碼下載地址:http://git.oschina.net/zwh_9527/Binder

以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持好吧啦網(wǎng)。

標(biāo)簽: Android
相關(guān)文章:
主站蜘蛛池模板: 国产在线中文字幕 | 国产亚洲一区二区三区在线观看 | 岛国av一区二区 | 日韩欧美国产一区二区 | 欧美一级在线免费观看 | 亚洲一区二区三区在线视频 | 1000部精品久久久久久久久 | 亚洲精品1| 国产亚洲日本精品 | 欧美一级片 | 久久亚洲精品久久国产一区二区 | 国产91丝袜 | 精品一区二区三区免费毛片 | 免费黄色特级片 | 亚洲高清av | 99re6热在线精品视频播放 | 国产在线麻豆精品入口 | 性一交一乱一透一a级 | 久久久久久国产精品 | 欧美一区二区在线 | 国产玖玖| 成人免费共享视频 | 日韩激情在线 | 欧美精品三区 | 亚洲一区不卡在线 | 精产国产伦理一二三区 | 精品国产免费人成在线观看 | 最新国产在线 | 高清亚洲 | 超碰成人免费 | 91麻豆精品国产91久久久久久 | 天堂国产| 99精品一区 | 国产精品电影在线观看 | 999国产精品视频免费 | 日本精品视频在线 | 日韩在线精品视频 | 久久久精彩视频 | 日韩成人在线免费视频 | 国产精品日韩欧美一区二区 | 成人午夜网站 |