日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Android IPC機制ACtivity綁定Service通信代碼實例

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

Binder通信過程類似于TCP/IP服務連接過程binder四大架構Server(服務器),Client(客戶端),ServiceManager(DNS)以及Binder驅動(路由器)

其中Server,Client,ServiceManager運行于用戶空間,驅動運行于內核空間。這四個角色的關系和互聯網類似:Server是服務器,Client是客戶終端,SMgr是域名服務器(DNS),驅動是路由器。

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(); }}

上面是一個 實現了parcelable的實體類,就是將book序列化,在putExtra到Service時會被寫入內存加快程序速度

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;// 啟動服務按鈕 Button shutDownServiceButton;// 關閉服務按鈕 Button startBindServiceButton;// 啟動綁定服務按鈕 @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); } /** 啟動服務的事件監聽 */ public Button.OnClickListener startService = new Button.OnClickListener() { public void onClick(View view) { /** 單擊按鈕時啟動服務 */ Intent intent = new Intent(MainActivity.this, CountService.class); startService(intent); Log.v('MainStadyServics', 'start Service'); } }; /** 關閉服務 */ public Button.OnClickListener shutdownService = new Button.OnClickListener() { public void onClick(View view) { /** 單擊按鈕時啟動服務 */ Intent intent = new Intent(MainActivity.this, CountService.class); /** 退出Activity是,停止服務 */ stopService(intent); Log.v('MainStadyServics', 'shutDown serveice'); } }; /** 打開綁定服務的Activity */ public Button.OnClickListener startBinderService = new Button.OnClickListener() { public void onClick(View view) { /** 單擊按鈕時啟動服務 */ Intent intent = new Intent(MainActivity.this, UseBrider.class); startActivity(intent); Log.v('MainStadyServics', 'start Binder Service'); } };}

mainActivity中當使用startService()啟動Service時會調用Service的onStartCommand()

當使用bindService()則會調用onBind()方法,可能會覺了看的又看怎么沒看到bindService()這個方法呢

重點在

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

繼續上代碼

UseBrider.java

/** 通過bindService和unBindSerivce的方式啟動和結束服務 */public class UseBrider extends FragmentActivity { /** 參數設置 */ 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));/** 進入Activity開始服務 * conn */ bindService(intent, conn, Context.BIND_AUTO_CREATE); } private ServiceConnection conn = new ServiceConnection() { /* * 這個方法會獲取到CountService的onBind方法中返回的Binder對象 * 然后就可以對服務進行某種操作了 */ public void onServiceConnected(ComponentName name, IBinder service) { // TODO Auto-generated method stub countService = ((CountService.ServiceBinder) service).getService(); countService.callBack(); } /** 無法獲取到服務對象時的操作 */ 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{ /**創建參數*/ 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('使用綁定服務', 10, 30, textPaint); textPaint.setColor(Color.GREEN); textPaint.setTextSize(18); canvas.drawText('使用綁定服務后,這個Activity關閉后', 20, 60, textPaint); canvas.drawText('綁定的服務也會關閉', 5, 80, textPaint); } }

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

countService.java

package com.example.android_binder_testservice;/**引入包*/import android.app.Service;// 服務的類import android.os.IBinder;import android.os.Parcel;import android.os.RemoteException;import android.os.Binder;import android.content.Intent;import android.util.Log;/** 計數的服務 */public class CountService extends Service { private String TAG = CountService.class.getSimpleName(); /** 創建參數 */ boolean threadDisable; int count; Book book;/* * 當通過bindService()啟動CountService時會調用這個方法并返回一個ServiceBinder對象 * 這個Binder對象封裝著一個CountService實例, * 客戶端就可以通過ServiceBinder對服務端進行一些操作 */ 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(); /** 創建一個線程,每秒計數器加一,并在控制臺進行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(); /** 服務停止時,終止計數進程 */ 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; } }}

代碼解釋有了,想不出來了

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

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持好吧啦網。

標簽: Android
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产在视频一区二区三区吞精| 日韩精品一二三| 亚洲一区二区免费在线观看| 久久久久99| 91精品国产自产在线观看永久∴ | 99久久www免费| 欧美中文一区二区| 国精品一区二区| 亚洲午夜电影| 久久xxxx| 国产亚洲高清在线观看| 久久99精品久久久久久园产越南| 欧美xxxx性| 欧美韩日一区| 亚洲一区成人| 91麻豆精品| 噜噜噜躁狠狠躁狠狠精品视频| 99视频精品视频高清免费| 在线日韩欧美| 久久高清一区| 激情五月综合网| 亚洲小说春色综合另类电影| 日韩一区二区三区精品视频第3页 日韩一区二区三区免费视频 | 国产精品久久国产愉拍| 国产精品yjizz视频网| 欧美日韩精品在线一区| 老牛国产精品一区的观看方式| 亚洲精品乱码日韩| 麻豆91小视频| 1024精品久久久久久久久| 亚洲一二av| 欧美国产小视频| 亚洲精品系列| 久久青草久久| 婷婷综合福利| 久久久久久久久丰满| 亚洲免费成人av在线| 天堂√8在线中文| 婷婷精品在线观看| 日韩和的一区二在线| 欧美亚洲tv| 国产视频一区欧美| 亚洲www免费| 久久精品凹凸全集| 欧美综合国产| 日韩在线短视频| 国产精品天堂蜜av在线播放| 免费视频一区二区| 欧美 日韩 国产精品免费观看| 欧美日韩91| 婷婷五月色综合香五月| 黄色成人精品网站| 久久天堂成人| 日韩成人精品一区| 精品国产乱码久久久| 午夜久久av| 一区二区三区网站| 尤物精品在线| 亚洲福利精品| 午夜欧美在线| 日本精品不卡| 日韩免费视频| 日本不良网站在线观看| 国产伊人久久| 国产精品99久久精品| 国内精品麻豆美女在线播放视频| 亚洲18在线| 日韩极品在线观看| 日韩精品免费视频人成| 亚洲ww精品| 欧美日韩一区二区三区四区在线观看 | 亚洲免费婷婷| 欧美专区在线| 亚洲色图网站| 国产麻豆一区| 精品视频97| 涩涩av在线| 五月天激情综合网| 亚洲丝袜美腿一区| 国产美女精品视频免费播放软件| 国产精品成人3p一区二区三区| 欧美一级二级三级视频| 麻豆精品在线| 在线日韩视频| 日韩精品免费视频一区二区三区| 久久精品一区二区三区中文字幕| 精品中国亚洲| 蜜桃av在线播放| 91久久午夜| 91欧美极品| 日本精品影院| 青青草91视频| 日韩免费小视频| 中文字幕成人| 国产资源在线观看入口av| 免费观看不卡av| 国产福利资源一区| 午夜免费一区| 麻豆精品久久| 99成人在线| 卡一卡二国产精品| 伊人久久婷婷| 国产精品亚洲片在线播放| 日韩精品1区| 日本精品久久| 国产精品99一区二区| 国产精品一区二区三区av麻| 欧美高清一区| 日韩欧美午夜| 国产伦精品一区二区三区视频| 91精品99| 久久一级电影| 国产精品精品国产一区二区| 欧美亚洲免费| 免费精品视频最新在线| 久久精品亚洲人成影院| 老司机精品在线| 亚洲va久久| 在线综合亚洲| 亚洲精品一区二区妖精| 精品无人区麻豆乱码久久久| 亚洲网址在线观看| 久久影院一区| 欧洲av不卡| 精精国产xxxx视频在线野外| 国产精品一区免费在线| 日韩激情综合| 日本少妇精品亚洲第一区| 久久高清国产| 亚洲少妇一区| 日韩在线a电影| 爽好久久久欧美精品| 激情综合亚洲| 日韩视频中文| 欧美综合国产| 性色一区二区| 亚洲欧洲av| 国产精品毛片久久久| 欧美国产极品| 极品av在线| 99久精品视频在线观看视频| 在线视频精品| 婷婷视频一区二区三区| 日韩av网站免费在线| 久久99久久人婷婷精品综合| 精品国产18久久久久久二百| 成人在线丰满少妇av| 欧美91精品| 另类av一区二区| 国产精品片aa在线观看| 亚洲精品永久免费视频| 亚洲国产日韩欧美在线| 青青草国产成人99久久| 国产999精品在线观看| 99热精品久久| 日韩精品久久久久久久软件91| 麻豆国产欧美一区二区三区 | 黄毛片在线观看| 一区二区视频欧美| 国产精品久久久久久av公交车| 久久av资源| 久久久久国产精品一区三寸| 亚洲精品一区二区在线播放∴| 精品资源在线| 久久午夜精品一区二区| 久久免费精品| 亚洲美女久久| 激情综合网五月| 精品中文在线| 日韩精品视频一区二区三区| 久久中文视频| 国产极品嫩模在线观看91精品| 九一精品国产| 色综合五月天| 欧美日韩18| 免费日韩av片| 91亚洲一区| 青青草视频一区| 国产亚洲激情| 日韩精品dvd| 另类小说一区二区三区| 综合激情一区| 99成人在线| 99久久精品网| 高清在线一区| 国产精品第十页| 亚洲日本三级| 免费看精品久久片| 国产亚洲毛片| 亚洲欧美激情诱惑| 99riav1国产精品视频| yellow在线观看网址| 国产精品久久久久蜜臀| 精品欧美日韩精品| 精品亚洲成人| 亚洲黄色中文字幕| 欧美freesex黑人又粗又大| 超碰在线99| 欧美二三四区| 激情欧美丁香|