安卓回調什麼意思
Ⅰ Android 點擊回調傳遞
在使用MultiTypeAdapter實現RecyclerView多類型顯示的時候,會創建一個ViewHolder和ViewBinder,此時如果要在Activity或者Fragment相應點擊事件的時候,需要在ViewHolder和ViewBinder之間做傳遞。如果一個ViewHolder下有RecyclerView,然後也使用了MultiTypeAdapter,那麼這個點擊事件的回調將會是一件相當頭疼的事情。
在使用 LifeCycle 時,發現他只需要當前類實現 LifecycleObserver ,然後通過調用 addObserver 方法即可實現事件傳遞。由此想到點擊事件是否也可以使用此種形式來實現。
DEMO
在受到 LifeCycle 的啟發下,模仿這寫了幾個類。
一個點擊事件如果在某個類中如果需要做操作,那麼需要實現該介面。
繼承OnItemClick,並實現具體的方法。
基本點擊事件Observer
這一層,對事件在OnBindViewHolder中做了一次傳遞,通過dispatchObserver方法,將ViewBinder中的事件傳遞到了ViewHolder中。
定義兩個點擊事件。
創建實體類,和Binder相對應。
在覆寫 setData 方法的時候,一定要調用super。不然事件無法傳遞。
響應事件的回調,只需要調用 getObserver 方法,然後傳入對應的Observer,如果有,就直接調用方法。
adapter傳遞事件,也是通過dispatchObserver方法。
ViewBinder其實就不需要做什麼事情了,比較簡單。
Ⅱ android介面回調的幾種
可以使用Observer,觀察者模式來實現回調。或者介面中傳入類,然後在介面處理之後,進行調用類的方法進行回調。
介面回調示例
public interface ConfirmDialogListener{
public void onLeft(Object obj); //按確認鍵
public void onRight(Object obj);//按back鍵
}
public static Dialog confirmDialog(final Context activity, final ConfirmDialogListener listener,final Object obj){
if(listener != null)
listener.onRight(obj);
}
Ⅲ 什麼是回調函數 android
class A implements Camera.PreviewCallback{
/**
* 預覽幀回調函數
*
*/
public void onPreviewFrame(byte[] data, Camera camera) {
//當視頻流開啟的時候就可以在這個方法里做你想做的事,那麼這個就是一個回調函數
}
}
Ⅳ android回調方法與activity生命周期有何關系
你的問題有點模糊,你這里主要想了解的是什麼,安卓的生命周期中onStart()就是一個回調方法,他和avtivity的關系如下,以下就是安卓生命周期的過程。。
package com.tutor.activitydemo;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class ActivityDemo extends Activity {
private static final String TAG = "ActivityDemo";
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.e(TAG, "start onCreate~~~");
}
@Override
protected void onStart() {
super.onStart();
Log.e(TAG, "start onStart~~~");
}
@Override
protected void onRestart() {
super.onRestart();
Log.e(TAG, "start onRestart~~~");
}
@Override
protected void onResume() {
super.onResume();
Log.e(TAG, "start onResume~~~");
}
@Override
protected void onPause() {
super.onPause();
Log.e(TAG, "start onPause~~~");
}
@Override
protected void onStop() {
super.onStop();
Log.e(TAG, "start onStop~~~");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.e(TAG, "start onDestroy~~~");
}
}
自己運行一下就知道了~這樣你的理解會更深,記得更好~
我們打開應用時先後執行了onCreate()->onStart()->onResume
BACK鍵:
當我們按BACK鍵時,我們這個應用程序將結束,這時候我們將先後調用onPause()->onStop()->onDestory()三個方法
HOME鍵:
當我們打開應用程序時,比如瀏覽器,我正在瀏覽NBA新聞,看到一半時,我突然想聽歌,這時候我們會選擇按HOME鍵,然後去打開音樂應用程序,而當我們按HOME的時候,Activity先後執行了onPause()->onStop()這兩個方法,這時候應用程序並沒有銷毀
而當我們再次啟動ActivityDemo應用程序時,則先後分別執行了onRestart()->onStart()->onResume()三個方法
涉及到了avtivity的生命周期,和垃圾回收機制。。
Ⅳ 安卓開發 回調函數和return有什麼不同
回調函數(callback) 先注冊到『系統』中,格式一般為<事件類型,回調函數>,每當指定事件類型出現後,『系統』就會調用 回調函數;
普通函數由『用戶的應用程序』調用 return 後函數執行就結束了
Ⅵ Android怎麼定義回調函數
class
a
implements
camera.previewcallback{
/**
*
預覽幀回調函數
*
*/
public
void
onpreviewframe(byte[]
data,
camera
camera)
{
//當視頻流開啟的時候就可以在這個方法里做你想做的事,那麼這個就是一個回調函數
}
}
Ⅶ android 回調方法怎麼寫
package com.smart;
/**
* 定義回調介面
*/
public interface CallBack {
void execute();
}
package com.smart;
/**
* 工具類
*/
public class Tools {
public void test(CallBack callBack){
long begin = System.currentTimeMillis(); //測試起始時間
callBack.execute();///進行回調操作
long end = System.currentTimeMillis(); //測試結束時間
System.out.println("[use time]:" + (end - begin)); //列印使用時間
}
public static void main(String[] args){
Tools tools = new Tools();
tools.test(new CallBack(){
public void execute() {
//A.method(); 測試類A的某個方法執行的時間
//B.method(); 測試類B的某個方式執行的時間
System.out.print("回調" );
}
});
}
}
package com.smart;
/**
* 工具類
*/
public class Tools {
public void test(CallBack callBack){
long begin = System.currentTimeMillis();//測試起始時間
callBack.execute();///進行回調操作
long end = System.currentTimeMillis();//測試結束時間
System.out.println("[use time]:" + (end - begin));//列印使用時間
}
public static void main(String[] args){
Tools tools = new Tools();
tools.test(new CallBack(){
public void execute() {
//A.method(); 測試類A的某個方法執行的時間
//B.method(); 測試類B的某個方式執行的時間
System.out.print("回調");
}
});
}
}
Ⅷ 誰知道android編程的callback是什麼意思如何理解裡面重寫的方法
callback 就是把一個函數傳到另外一個函數,讓對方可以叫回來。
Ⅸ 在java中回調函數怎麼理解,android中的回調函數和java中有區別嗎
可以理解為一種邏輯的延伸。例如在java中已onXXX開頭的方法。
這些方法通常是一種信息的延伸。預示著某些事件發生了。這些信息通常是某些大邏輯的一部分。而其他部分不需要開發者考慮。
比如onCreate方法,了解了生命周期就會知道他是整個activity第一個執行的代碼。那麼他究竟是誰調用的。這個一般不需要考慮。只需要了解系統在調用即可。 而這個方法在執行的時候。需要你去補充這個方法的實現。 所以相當於你完成了事件的餘下部分。
比如早晨需要在鬧鈴響之後起床。那麼你可以設置一個timer來記時或者是一個線程來跑。當發現到的時候。需要把這個事件拋出去。至於誰來處理。這不是鬧鈴考慮的范圍。他的作用就是觸發事件.至於處理。那麼需要處理這個事件的。可以用很多方法來建立關聯的句柄。
比如。通過介面的實現。繼承。或者像android里的廣播。
回調函數描述的是一種模式。這個和語言或平台無關。所以android中和java中是一樣的。C++中也有。
Ⅹ Android 回調介面是啥,回調機制詳解
在Android中到處可見介面回調機制,尤其是UI事件處理方面,這里介紹android介面回調機制,涉及到android介面回調相關知識
在使用介面回調的時候發現了一個經常犯的錯誤,就是回調函數裡面的實現有可能是用多線程或者是非同步任務去做的,這就會導致咱們期望函數回調完畢去返回一個主函數的結果,實際發現是行不通的,因為如果回調是多線程的話是無法和主函數同步的,也就是返回的數據是錯誤的,這是非常隱秘的一個錯誤。那有什麼好的方法去實現數據的線性傳遞呢?先介紹下回調機制原理。
回調函數
回調函數就是一個通過函數指針調用的函數。如果把函數的指針(地址)作為參數傳遞給另一個函數,當這個指針被用為調用它所指向的函數時,咱們就說這是回調函數。回調函數不是由該函數的實現方直接調用,而是在特定的事件或條件發生時由另外的一方調用的,用於對該事件或條件進行響應。
開發中,介面回調是咱們經常用到的。
介面回調的意思即,注冊之後並不立馬執行,而在某個時機觸發執行。
舉個例子:
A有一個問題不會,他去問B,B暫時解決不出來,B說,等咱(B)解決了再告訴您(A)此時A可以繼續先做別的事情。
那麼就只有當B解決完問題後告訴A問題解決了,A才可以能解決這個問題。
代碼中比如最常用的:
一個Activity中給按鈕一個介面回調方法,只有用戶點擊了這個按鈕,告訴按鈕被點擊了,才會執行按鈕介面回調的方法
Button btn = new Button(this);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
}
});
那麼下面通過一個Demo理解介面回調:
主線程開啟一個非同步任務,當非同步任務接收到數據,則把數據用TextView顯示出來
1、首先 咱們需要定義一個介面,定義一個方法,參數為一個字元串:
package com.xqx.InterfaceDemo;
public interface ChangeTitle {
void onChangeTitle(String title);
}
2、寫一個非同步任務,把介面作為構造方法參數,在doInBackground()方法中判斷如果有數據,則介面回調
package com.xqx.InterfaceDemo;
import android.content.Context;
import android.os.AsyncTask;
public class MyTask extends AsyncTask<String,Void,String>{
private ChangeTitle changeTitle;
public MyTask(ChangeTitle changeTitle) {
this.changeTitle = changeTitle;
}
@Override
protected String doInBackground(String... strings) {
if (strings[0]!=null){
changeTitle.onChangeTitle(strings[0]);
}
return null;
}
}
3、主Activity,給非同步任務參數傳this,即 介面回調方法在此類中執行,那麼就需要實現ChangeTitle介面,重寫介面中
onChangeTitle 方法
package com.xqx.InterfaceDemo;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
public class MainActivity extends Activity implements ChangeTitle {
private TextView textView;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
textView = (TextView) findViewById(R.id.textView);
new MyTask(this).execute("我是標題");
}
// 重寫介面方法,執行相應操作
@Override
public void onChangeTitle(String title) {
textView.setText(title);
}
}