Android(12)——OkHttp網絡操作框架,EventBus事件總線

Android

安卓開發者指南:https://developer.android.google.cn/guide

1 Okio & OkHttp

1.1 Okio簡介

I/O

➢java.io
➢java.nio
➢okio:okio-1.12.0.jar
作用:訪問數據、存儲數據、處理數據

掌握傳輸數據的方法

1.2 Okio的核心類

1.2.1 Okio-ByteString

String、ByteString

創建ByteString
●okio.ByteString of(byte… data)
●okio.ByteString encodeUtf8(String str)
●okio.ByteString decodeHex(String hex)
●okio.ByteString decodeBase64(String base64)
● okio.ByteString read(InputStream in,int byteCount)

ByteString常用方法
●okio.ByteString#base64
●okio.ByteString#hex
●okio.ByteString#md5
●okio.ByteString#sha1
●okio.ByteString#write(java.io.OutputStream)

okio是個jar包,可以在AS、idea上測試,這裏在idea上測試:

1.2.2 Okio-Buffer

輸入流
Source
➢read(Buffer sink, long byteCount)
➢timeout()
➢close()

輸出流
Sink
➢write(Buffer source, long byteCount)
➢flush()
➢timeout()
➢close()write

Buffer類
➢okio.BufferedSource
➢okio.BufferedSink
方法:
buffer.readFrom(new FileInputStream(“in.png”));
buffer.writeTo(new FileOutputStream(“out.png”));

把in.txt拷貝到out.txt:

1.3 OkHttp

➢Apache HttpClient
➢HttpURLConnection
➢OkHttp:okhttp-3.7.0.jar

OkHttpClient mClient = new OkHttpClient();

1.4 OkHttp核心類

OkHttp客戶端做兩件事:請求,響應
Request
➢URL
➢method
➢headers
➢body

Get
Request.Builder builder = new Request.Builder();
builder.ur1(“http: //httpbin. org/get”);
Request request = builder.build();

Call
Call call = client.newCall(request);
Response response = call.execute();

Response
➢code
➢headers
➢body

Callback

Callback callback = new Callback() {
	@Override
	public void onFailure(Call call, IOException e) {
	}
	@Override
	public void onResponse(Call call, Response response) throws IOException {
	}
};

HttpUrl

HttpUr1.Builder builder = HttpUr1.parse( "https:/ /httpbin .org/").newBuilder();
builder.addEncodedPathSegment("get");
builder.addEncodedQueryParameter("show_ env", "1" );
HttpUrl httpUr1 = builder.build();

Post

Request request = new Request.Builder()
	.ur1("https://api.github.com/markdown/raw")
	.post(RequestBody.create(MEDIA_TYPE_MARKDOWN, postBody))
	.build();

demo:
1.加入網絡的權限:< uses-permission android:name=“android.permission.INTERNET”/>
2.OkHttp-get-Rquest

3.OkHttp-get-Response

4.OkHttp-post

2 EventBus事件總線

EventBus是以觀察者模式實現的事件總線,通過發佈 / 訂閱方式來管理事件總線。簡化了組件間以及組件與後臺線程間的通信。可以實現線程間的切換,包括後臺線程、UI線程、異步線程。

2.1 組件通信之監聽

發送方----訂閱方,用EventBus進行事件的訂閱和發佈

Fragment消息發送方,Activity消息接收方
發送:

接收:

在訂閱方的時候,設置監聽器

弊端:定義接口(增加的話就會新增很多接口);添加一個setEventListener方法(事件的發佈方和訂閱方耦合在一起,依賴性高了);

2.2 組件通信之本地廣播

2.3 EventBus

或者

事件,訂閱(註冊、處理),發佈

使用步驟:
1.定義事件,就是普通的java對象(Success.java),可以加任何成員變量、方法,攜帶信息;
2.訂閱方:註冊到EventBus中

3.發佈方

2.4 線程模式

  1. Thread
    ➢MAIN(UI) 線程
    ➢後臺線程:可做耗時操作,不可更新頁面

  2. ThreadMode
    ➢POSTING
    ➢MAIN
    ➢MAIN_ORDERED
    ➢BACKGROUND
    ➢ASYNC

posting:默認,發佈和訂閱事件在同一個線程


發佈方:

main:訂閱回調函數一定在主線程,可以大膽更新界面;可能造成阻塞發佈者



main_ordered:回調函數在主線程

main中發佈方會被訂閱方阻塞,在main_ordered中後續會立即執行,事件的發佈方不會被訂閱方阻塞。

background:如果發佈者運行在主線程下,EventBus就會創建一個單獨的後臺線程來呼叫訂閱函數;如果事件處理函數運行在非UI(後臺)線程下,就直接呼叫訂閱函數,訂閱函數就會阻塞


1.創建事件類型,新建類BackgroundEvent,添加屬性String threadInfo,構造函數
2.事件定義函數,回調函數

3.發佈事件:

async:事件處理函數運行在非UI線程下,進行耗時操作;訂閱方始終是在獨立的線程中運行,如耗時的網絡操作就可以使用這個模式。

1.創建事件類型,新建類AsyncEvent,添加屬性String threadInfo,構造函數
2.事件定義函數,回調函數,類似於上一種
3.發佈方:

2.5 粘性事件

Sticky

1.定義事件類型:SticktyMessageEvent,添加屬性String threadInfo,構造函數
2.發佈粘性事件

3.目標Activity中訂閱

2.6 配置

在代碼中並沒有使用這個方法,而是在動態反射使用的。

混淆規則的設置。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章