編輯:關於Android編程
一.簡介,例子
CallBack是回調的意思,回調函數或者回調方法是軟件設計與開發中一個非常重要的概念,掌握回調函數的思想對程序員來說(不管用哪種語言)是非常必要的。
什麼是回調函數呢?回調函數就是預留給系統調用的函數,而且我們知道該函數被調用的時機。這裡有兩點需要注意:第一點,我們寫回調函數不是給自己調用的,而是准備給系統在將來某一時刻調用的;第二點,我們應該知道系統在什麼情形下會調用我們寫的回調函數。
舉個現實生活中回調函數的例子,我們平時考試答題的第一件事是干嘛?沒錯,是寫上學號和姓名。這裡注意了,我們填寫學號和姓名不是給自己看的(即該方法不是給自己調用的),而是給老師登記分數時看的(預留給系統將來調用),這其實就是一個回調的應用。
下面再來看一下Android中應用到回調的場景。
場景一:
Button button = (Button)this.findViewById(R.id.button); button.setOnClickListener(new Button.OnClickListener() { //回調函數 @override publicvoid onClick(View v) { buttonTextView.setText(按鈕被點擊了); } });
上面的代碼給按鈕加了一個事件監聽器,這其實就是回調最常見的應用場景之一。我們自己不會顯示地去調用onClick方法。用戶觸發了該按鈕的點擊事件後,它會由Android系統來自動調用。
場景二:
@Override publicvoid onCreate(Bundle saveInstanceState) { super.onCreate(saveInstanceState); // You code...} @Override publicvoid onResume() { super.onResume(); // You code...}
上面的方法大家就更熟悉了,這是Android系統在Activity類中設置的回調函數,在Activity生命周期的不同階段,Android系統會自動調用相應的方法(onCreate, onPause, onResume,onDestroy等等)
以上是兩個Android中用到回調的場景,他們的代碼實現可能不同,但是思想上是相近的,都是回調思想的體現。下面,我們在Java中分別模擬這兩個場景。
首先模擬注冊事件監聽器。先寫一個監聽器接口
package com.listener; /** * 點擊監聽器接口 * */publicinterface MyOnClickListener { publicvoid onClick(); }
然後寫一個我們自己的Button類
package com.listener; publicclass MyButton { private MyOnClickListener listener; /** * 設置具體點擊監聽器 * @param listener 點擊監聽器實現類 */ publicvoid setOnClickListener(MyOnClickListener listener) { this.listener = listener; } /** * 按鈕被點擊 */ publicvoid doClick() { listener.onClick(); } }
最後模擬Client端的注冊監聽器和觸發點擊操作。
package com.listener; publicclass Client { publicstaticvoid main(String[] args) { MyButton button =new MyButton(); //注冊監聽器 button.setOnClickListener(new MyOnClickListener() { @Override publicvoid onClick() { System.out.println(按鈕被點擊了); } }); //模擬用戶點擊 button.doClick(); } }
以上就是回調思想在Android中事件監聽的運用,我們再模擬第二個場景,回調在activity生命周期方法調用的體現。由於比較簡單,我就不多做解釋了,大家直接看代碼。
package com.activity; public abstract class Activity { protectedvoid onCreate() { System.out.println(創建准備~~~~~~~); } protectedvoid onDestroy() { System.out.println(銷毀准備~~~~~~~~); } }
package com.activity; publicclass ConcreteActivity extends Activity { @Override protectedvoid onCreate() { super.onCreate(); System.out.println(創建中!!!); } @Override protectedvoid onDestroy() { super.onDestroy(); System.out.println(銷毀中!!!); } }
package com.activity; publicclass Client { publicstaticvoid main(String[] args) { Activity activity =new ConcreteActivity(); activity.onCreate(); activity.onDestroy(); } }
android中提供了4中動畫: AlphaAnimation 透明度動畫效果 ScaleAnimation 縮放動畫效果 TranslateAnimation 位移動畫
Android5.0新增了一個重啟後可恢復Task功能。在正常的Activity切換使用過程中AMS會將Task和對應截圖進行保存,重啟後會將Task和截圖恢復到最近任務
目錄一、微服務架構模式1.1 模式描述 1.2 模式拓撲 1.3 避免依賴與調度 1.4 注意事項 1.5 模式分析 二、Android中的微服務架構 三、結語前段時間我
簡介點擊事件的事件分發,其實就是對MotionEvent事件的分發過程,即當一個MotionEvent產生之後,系統需要這個事件傳遞給一個具體的View,而這個傳遞過程就
Agenda:一張圖看Camera2框架類圖 CameraService