Android 抽象回撥函式以及介面回撥更新UI
回撥函式使用,使得程式碼變得部分跟不變部分更加明顯,程式碼整體上有一個質的提升。
我是用抽象類裡寫的抽象回撥函式,通過通知註冊介面形式,可以隨時傳遞資料,接受資料。
同時我用介面函式回撥更新UI。下面請看程式碼。
抽象類CallBackListenner.java
package com.example.recallbackdemo;
//回撥抽象類CallBackListenner
public abstract class CallBackListenner {
// 回撥函式
public abstract void CallBackTime(int ntime);
}
介面類OnTimeUpdateListInterface.javapackage com.example.recallbackdemo; //更新UI介面 public interface OnTimeUpdateListInterface { //抽象回撥方法 public abstract void UpdateUIInterface(int ntime); }
時間管理類TimeManage.java
package com.example.recallbackdemo; import android.os.Handler; public class TimeManage { private int i = 0; private CallBackListenner mcallBackListenner = null; // 註冊通知回撥函式 public void ReCallBackListenner(CallBackListenner callBackListenner) { mcallBackListenner = callBackListenner; } Handler handler = new Handler(); // 將要執行的操作寫線上程物件的run方法當中 Runnable updateThread = new Runnable() { public void run() { // 停留1秒 handler.postDelayed(updateThread, 1000); mcallBackListenner.CallBackTime(i); i++; } }; // 開始計時 public void StartTime() { if (i == 0) { handler.post(updateThread); // 啟動執行緒 } } // 結束計時 public void EndTime() { handler.removeCallbacks(updateThread); i = 0; mcallBackListenner.CallBackTime(i); } }
MainActivity
package com.example.recallbackdemo; import android.os.Bundle; import android.os.Handler; import android.os.Message; import android.app.Activity; import android.view.View; import android.widget.TextView; import android.widget.Toast; public class MainActivity extends Activity implements OnTimeUpdateListInterface { private TimeManage mTimeManage = new TimeManage();; private int mntime = 0; private TextView mtvTime; private Handler mHandlerUI = new Handler() { public void handleMessage(Message msg) { Bundle dataBundle = msg.getData(); if (dataBundle == null) return; mntime = dataBundle.getInt("time"); if (mntime >= 0) mtvTime.setText(String.valueOf(mntime)); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); mtvTime = (TextView) findViewById(R.id.tv_time); // 回撥函式接受函式 mTimeManage.ReCallBackListenner(new CallBackListenner() { @Override public void CallBackTime(int ntime) { mntime = ntime; UpdateUIInterface(mntime); } }); } // 按鍵開始監聽 public void Start(View v) { if (mntime > 0) { Toast.makeText(getApplicationContext(), "已經開始計時....", Toast.LENGTH_LONG).show(); } else { mTimeManage.StartTime(); } } // 按鍵結束監聽 public void End(View v) { mTimeManage.EndTime(); } // 實現介面類裡的抽象函式,用來回調更新ui內容 public void UpdateUIInterface(int ntime) { Message msg = new Message(); Bundle dataBundle = new Bundle(); dataBundle.putInt("time", ntime); msg.setData(dataBundle); mHandlerUI.sendMessage(msg); } }
xml檔案
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/LinearLayout2"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity" >
<LinearLayout
android:layout_width="match_parent"
android:layout_height="100dp"
android:gravity="center" >
<TextView
android:id="@+id/tv_time"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="66sp"
android:text="0" />
</LinearLayout>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="20dp"
android:gravity="center" >
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="Start"
android:text="開始" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:onClick="End"
android:text="結束" />
</LinearLayout>
</LinearLayout>
這裡還是用了執行緒實時更新UI。
demo還是前一章計時器,實現方法用了回撥機制。
相關推薦
Android 抽象回撥函式以及介面回撥更新UI
回撥函式使用,使得程式碼變得部分跟不變部分更加明顯,程式碼整體上有一個質的提升。 我是用抽象類裡寫的抽象回撥函式,通過通知註冊介面形式,可以隨時傳遞資料,接受資料。 同時我用介面函式回撥更新UI。下面
Android : Recyclerview的使用以及介面回撥
先上效果圖 Recyclerview是沒有點選事件的,所以介面回撥就是寫的點選事件 需要用到的jar包 implementation 'com.android.support:recyclerview-v7:28.0.0' android.support.v7.widget
TLS回撥函式以及反除錯簡單使用
TLS回撥函式以及反除錯簡單使用 0x00 TLS介紹 TLS(Thread Local Storage,執行緒區域性儲存),主要用於給執行緒獨立的傳值,由於執行緒不擁有程序的資源,所以幾個同一程序的幾個執行緒需要獨立賦值時的需要通過TLS技術。每個執行緒建立時都會分配
Recyclerview的使用以及介面回撥
先上效果圖 Recyclerview是沒有點選事件的,所以介面回撥就是寫的點選事件 需要用到的jar包 implementation 'com.android.support:recyclerview-v7:28.0.0' android.support.
Node.js的回撥函式以及事件迴圈
Node.js回撥函式 Node.js是單程序單執行緒應用程式,但是可以通過事件和回撥支援併發操作 Node.js的非同步程式設計依託於回撥實現。Node.js中有大量的回撥函式函式,Node的所有API都支援回撥函式。 非同步程式設計就是併發性的執行程式
【cocos2d-x從c++到js】回撥函式1——按鍵回撥
回撥函式是介面互動和接入各種第三方SDK的關鍵所在,因為回撥函式的C++程式碼是不能自動生成的,一切的一切,都需要手寫完成。 比較不錯的是,Cocos2d-x引擎對於回撥函式提供了完整的包裝機制。我們所需要做的就是了解這個機制,並使用他。學習引擎自己的程式碼
Android執行緒模型--在子執行緒中更新UI
Android是支援多執行緒的。主執行緒也稱UI執行緒,子執行緒也稱工作執行緒。一般耗時操作在子執行緒中進行,更新UI操作在主執行緒中進行。在主執行緒中執行耗時操作容易發生ANR錯誤,即應用程式無響應。而Android中又規定只有建立UI的執行緒
C++回撥函式呼叫Java介面抽象函式
專案中很多程式碼採用C++編寫,配置介面則採用BS結構,使用Java語言進行設定。因此需要實現Java呼叫C++編寫的函式庫(dll檔案或so檔案),採用的技術為JNI(Java Native Interface),對於常用的呼叫方式在《The Java Native In
c的回撥函式與java中抽象函式,介面函式,抽象類簡單理解
先了解c語言的回撥函式,舉個簡單例項步步深入,比如A程式提供給B程式使用,但是A想要呼叫B的程式碼,這樣各自不同功能由B實現即可。 例項1A: extern int get_B_data(); void A_data_handle(){ printf("%d\n",get
Android遠端服務AIDL的使用以及配合介面回撥使用
遠端服務的介面回撥 Android 開發中的一些場景需要用到程序間通訊,一般使用AIDL(Android Interface Definition Language)。使用AIDL繫結一個遠端服務,遠端服務可以被其他應用繫結,繫結後可以使用定義在AIDL介
Android介面回撥總結,以及運用到彈窗PopWindow的Demo實現
背景: 最近專案中接觸到介面回撥,以及Android彈窗PopWindow元件的使用,現在利用學到的知識自己寫了一個簡單的Demo,練習下在Android下如何運用介面回撥,來實現彈窗PopWindow的功能。 程式碼結構: 1. 定義一個介面:OnSelectIt
emWin介面庫注意事項之自定義回撥函式之後,控制代碼為0
由於在嵌入式裝置上可供使用的介面庫很少,專案當中所使用的介面庫為德國SEGGER公司開發的emWin介面庫。使用上和windows的GDI大致類似,也提供了豐富的API介面。如果我們需要對控制元件進行自繪的話,一定要進行的一個操作是通過設定回撥
26、【支付模組開發】——支付寶回撥函式實現和查詢使用者訂單狀態介面編寫
####1、支付寶回撥函式實現 我們在除錯支付寶沙箱環境的時候,支護寶會有一個回撥函式,也就是在支付成功之後,可以呼叫我們支付之後需要執行的相關方法,從而達到資料庫的資料和我們的操作相統一。 首先我們先在本地將回調函式編寫好~ 在OrderController類中新建我們的支付寶回撥函式
egret 全屏, 和載入資源, 以及回撥函式
1, 有時候在手機瀏覽器中因為有 虛擬按鍵以及標題欄, 使得即便設定了全屏也沒有辦法變成全屏, 但是好像JS 中有方法向瀏覽器請求全屏 2, 載入資源, 關閉後解除安裝, 第二次再進來的時候依然很快, 這是因為瀏覽器有快取 3, egret的回撥函式十分的隨便, 帶引數的回撥函式
jquery序列化表單以及回撥函式的使用
在開發專案中。將前臺的值傳給後臺,有時的JSP表單中的值有一兩個,也有所有的值,假設這時一個個傳,必然不是非常好的辦法,所以使用jQuery提供的表單序列化方法,能夠非常好的解決問題。同一時候能夠封裝成通用的函式,執行成功能夠呼叫各自的回撥函式。實現各自的功能。 程式碼例如以下:
對於Android中介面回撥機制的理解
對於介面回撥機制首先要弄明白的問題是為什麼需要它,也就是介面回撥能為我們解決什麼問題: 在開發過程中我們經常會遇到一些有關觸發執行的問題,比如使用者觸發按鈕,然後程式就執行了一系列的操作的比如註冊登入啊;問題的核心在於為什麼是出發了按鈕才執行,不觸發就不執行嗎? 這個時候就能體現出各
Android 介面回撥實現Fragment的跳轉
---------------------MainActivity------------------- package com.example.earl.fragmentinterfacejump; import android.app.Activity; import androi
如何解決微信小程式介面適配問題-引用-生命週期回撥函式-優化機制-樣式引入
如何解決微信小程式介面適配問題 .wxss page{ height: 100%; width:750rpx; } this.setData({ imageWidth: wx.getSystemInfoSync().windowWidth }) rpx(res
Python學習【第21篇】:程序池以及回撥函式 python併發程式設計之多程序2-------------資料共享及程序池和回撥函式
python併發程式設計之多程序2-------------資料共享及程序池和回撥函式 一、資料共享 1.程序間的通訊應該儘量避免共享資料的方式 2.程序
結合Dialog的onClick()事件理解Android中的回撥函式三部曲
App都少不了的一個需求,那就是Dialog彈窗,而且通常一個應用中都不止一個Dialog彈窗,多的時候可能達到六七個,那麼你是否會為你的應用重複寫六七個彈窗:ExitLoginDialog、DownDialog、UpdateDialog……如果是使用系統的Dialog還好,可以直接new一個