1. 程式人生 > >關於接口回調的分析

關於接口回調的分析

圖片 自己 color 內部類 模型 例如 post android中 per

最近在看《Android編程權威指南(第2版)》,看到24章的時候碰到一個問題,在後臺線程中使用接口把後臺的某種任務(例如下載後圖片的處理)交付給前臺線程(或者叫做UI線程或主線程)。

android使用的是Handler.post(Runnable)方法:

1 Runnable myRunnable = new Runnable() {
2 @Override
3 public void run() {
4 /* Your code here */
5 }
6 };
7 Message m = mHandler.obtainMessage();
8 m.callback = myRunnable;

Message設有回調方法時,它從消息隊列取出後,是不會發給target Handler(目標Handler)。相反,存儲在回調方法中的Runnable的run()會直接執行。

對於類內部的接口處理某個問題我還是沒太明白,後來用java來做了個類似的例子。

在這裏,主類是InnerInterfaceTest 類似於Android的主線程,主類自帶一個內部類A用於定義一個模型(存儲一種數據)。下面是主類的代碼:



 1 public class InnerInterfaceTest {
 2 
 3     private static DoSmth<A> mDoSmth = new
DoSmth<>(); //DoSmth<A> 是泛型類 A是自帶的模型類 4 static A a = new InnerInterfaceTest().new A("a string");//初始化模型類A的變量 a 5 6 public static void main(String[] args) { 7 //在這裏通過調用setDo方法,可實例化DoSmth<T>類中的接口Do<T>,並且implements接口的方法,達到讓 8 //後臺類DoSmth<T>的工作交由前臺類InnerInterfaceTest進行處理
9 //實現接口的方法onDo(A t),在這裏,我們定義了前臺線程的處理是對A的對象的成員m進行打印處理 10 //還可以定義成別的處理方式,具體可以自己寫。在這裏我們就實現了將後臺線程轉到前臺進行單獨處理。 11 mDoSmth.setDo(new DoSmth.Do<A>(){ 12 public void onDo(A t){ 13 Printer.P(t.m); 14 } 15 }); 16 //上面實例化了接口DoSmth.Do<T>並實現了onDo方法,且已將實例後的接口對象傳給了後臺類的Do<T> do1 17 mDoSmth.DoCall(a); //調用方法1:使用後臺類的方法DoCall對模型類A進行處理 18 mDoSmth.do1.onDo(a);//調用方法2:使用實例後的do1的方法onDo對模型類A進行處理 19 } 20 21 22 public class A{ 23 String m; 24 25 public A(String str){ 26 m = str; 27 } 28 } 29 }
在這裏,我們使用 mDoSmth.DoCall(a); 或 mDoSmth.do1.onDo(a); 主動調用後臺的方法。雖然Android中這個工作由主線程的Handler和Looper來自動處理。
而後臺的類我們定義如下:
技術分享圖片
 1 public class DoSmth<T> {
 2     
 3     public Do<T> do1;
 4     
 5     interface Do<T>{
 6         void onDo(T t);
 7     }
 8     
 9     public void setDo(Do<T> d){
10         do1 = d;
11     }
12     
13     public void DoCall(T t)
14     {
15         do1.onDo(t);
16     }
17 }
DoSmth.java

在Android中,後臺類會使用下面的代碼讓主線程的handler處理後臺接口類中定義的工作

技術分享圖片
1 mMainHandler.post(new Runnable() {
2     public void run(){
3         do1.onDo(t);
4     }
5 });
View Code

 以上就是我分析的一些細節,可能有不對的地方,先記下,以後方便復習更正。

關於接口回調的分析