文章目錄
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 線程模式
-
Thread
➢MAIN(UI) 線程
➢後臺線程:可做耗時操作,不可更新頁面 -
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 配置
在代碼中並沒有使用這個方法,而是在動態反射使用的。
混淆規則的設置。