【Android與IOS開發對比系列】之 回調機制,androidios
【Android與IOS開發對比系列】之 回調機制
Android和IOS的回調的實現原理基本相同,只是具體命名不同而已。
本文將總結 IOS的Delegate和block, Android的interface和Handler.
IOS 協議
委託Delegate是協議的一種,通過@protocol聲明。委託類的作用,一是傳值,二是傳事件。
舉個例子:
要實現選相簿圖片, 依據圖:
C類是委託類,定義了一個傳值方法。
A類顯示一個圖片,點擊按鈕,進入B類選取圖片。
當在B類選完圖片,將實現methodC:para方法。
返回A, 執行回調方法:
methodC:para{
//get imageView Url from para
}
Android 介面
回調Callback使用介面來實現,通過實現interface類。
舉個例子:
同樣可以遵循IOS的例子,
那再舉個別的:要實現點擊事件的調用
C類是介面類, View.OnClickListener,
A是一個Activity,B是一個Button,
初始化A, Button btn,
btn.setOnClickListener(this),
View.OnClickListener(){
}
而B則在onTouch事件中調用View.onClickListener
怎麼樣,很熟悉吧。
IOS block
IOS有一個block 機制 是Android沒有,超級好用。
下面舉三種代碼講解:
1.第一種:
typedef void (^ArrayResultBlock)(NSArray *objects, NSError *error);[self queryByStory:self.story callback:^(NSArray *objects, NSError *error) {}];-(void)queryByStory:(Story *)story callback:(ArrayResultBlock)block{ [_dbQueue inDatabase:^(FMDatabase *db) { if (block) { block(result, nil); } }];}
2.第二種:
VC *vc = [VC new]; vc.typeBlock = ^(NSString * result){ //do anything }; @property (nonatomic, copy) void(^typeBlock)(NSString *); - (void)method{ if(_typeBlock){ _typeBlock(@"end data restored"); }
3.第三種: block嵌套
typedef void (^CommonResultBlock)(BOOL successed);[self saveStory:^(BOOL successed) { [self saveMore:^(BOOL successed) { }]; }];-(void) saveStory:(CommonResultBlock)block{ if(block){ block(YES); }}-(void) saveMore:(CommonResultBlock)block{ if(block){ block(YES); }}
Android Handler
如果說 block只有IOS有,Android肯定不服了,因為Android有 Handler。
其實,Handler和block的作用是一樣的,只不過原理上完全不是一個概念。
下面代碼舉一個Handler的例子:
private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { if (msg.what == UPDATE) { tv.setText(String.valueOf(msg.obj)); } super.handleMessage(msg); } };
new Thread() { @Override public void run() { try { Message msg = new Message(); msg.what = UPDATE; msg.obj = "更新後的值:" + i; handler.sendMessage(msg); } } catch (InterruptedException e) { e.printStackTrace(); } } }.start();
當然,Handler也可想block那樣嵌套使用。
另外:
如有什麼觀點和問題,歡迎討論和指正。
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。