Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Android跨線程通信狀態框架Simple2Develop

Android跨線程通信狀態框架Simple2Develop

編輯:關於Android編程

基本信息

Simple2Develop 是一款基於Android平台的跨線程通信框架,可以讓你以一種簡單的方式進行復雜的通信,支持同進程中多Activity之間即時交互,子線程與主線程之間的交互等等。對通信的方式進行了解藕。

配置方式

此框架已經上傳至 JCenter ,使用Gradle方式:

compile 'com.virtualightning.library.simple2develop:simple2develop:0.1.8'

項目Github托管:

https://github.com/CimZzz/Simple2Develop

框架介紹

在介紹之前首先看下結構圖

\

StateManager(Singleton)

StateManager(狀態管理者)是一個單例,用於創建 StateRecord,目前暫無其他作用,只是作為一個Generator,將來可能會在此基礎上對 StateRecord 進行統一管理。

 

 

StateRecord

StateRecord(狀態記錄)是此框架的核心類,其中維護了一個全局靜態表用於存儲全局 StateMediator 和一個存儲監控 StateMediator 狀態的內部表,使用者可以通過狀態的解析生成監控的狀態(配合使用Analyzer)。

當監控的狀態為全局狀態時,會從全局靜態表內找到對應狀態並進行克隆,實現同一狀態的多重監控;如果監控狀態為私有狀態時,則會實例化一個新的 StateMediator 置入監控表內。(注意監控的狀態名應唯一)

 

InternalState

InternalState(內部狀態)標識著 StateRecord 的狀態,用於判斷 StateRecord 當前的狀態,主要用於控制對Observer的通知時機。

Observer

Observer(狀態觀察者)作用是當其監控的狀態發生改變時所作出的響應操作。一個狀態只能對應一個Observer,並且 Observer 的操作始終運行在主線程。

State

State(狀態對象)保存著一個狀態值(true or false)和多個 StateMediator。當其中狀態發生改變時(無論狀態是否真正的改變),都會通知 StateMediator 將狀態發布給 Observer,最終由 Observer 決定此狀態事件是否執行相應的操作。

StateMediator

StateMediator(狀態中介)會保存一個 State 的引用和一個 Observer 的弱引用。當狀態發生變化時,StateMediator 會將變化的結果發送給 State 進行狀態變化,然後 State 再將變化結果發布給所有監控此狀態的

StateMediator ,再由其根據運行環境轉發給 Observer


 

MemoryObserver

MemoryObserver(記憶性狀態觀察者)是 Observer 的一個子類,作用是每次通知狀態變化時都會將最近的狀態進行保存,如果此次的通知的狀態與上一次狀態一致時,則不會執行其中操作


 

PassiveObserver

PassiveObserver(被動狀態觀察者)是 Observer 的一個子類,作用是每次通知狀態變化時都會執行其中操作。

以上就是此框架中核心的類。

框架使用

package com.virtualightning.simple2develop.state;

import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import com.virtualightning.library.simple2develop.state.AnalyzeGlobalState;
import com.virtualightning.library.simple2develop.state.AnalyzeState;
import com.virtualightning.library.simple2develop.state.AnalyzeView;
import com.virtualightning.library.simple2develop.state.Analyzer;
import com.virtualightning.library.simple2develop.state.PassiveObserver;
import com.virtualightning.library.simple2develop.state.StateManagement;
import com.virtualightning.library.simple2develop.state.StateRecord;
import com.virtualightning.library.simple2develop.ui.ActionBarUI;
import com.virtualightning.library.simple2develop.ui.ActionBarUICreater;
import com.virtualightning.simple2develop.R;

/**
 * Created by CimZzz on 16/8/24.

 * Project Name : Virtual-Lightning Simple2Develop

 * Since : VLSimple2Develop_0.1.8

 * Description:

 */
/*監控全局狀態,狀態名為 “GS_0”*/
@AnalyzeGlobalState(StateRecordActivity.GLOBAL_STATE_0)

/*監控私有狀態,狀態名為 “0” ,初始狀態為 true*/
@AnalyzeState(
       stateNames = {StateRecordActivity.STATE_0},
       states = {true}
)
public class StateRecordActivity extends ActionBarUI {
    public static final String GLOBAL_STATE_0 = "GS_0";//全局狀態
    public static final String STATE_0 = "0";//私有狀態

    private StateRecord stateRecord;//狀態記錄


    /*使用注解快速綁定控件*/

    @AnalyzeView(R.id.state_tv)
    private TextView tv;

    @AnalyzeView(R.id.state_btn)
    private Button btn;



    @Override
    protected void onBaseUICreate(ActionBarUICreater creater) {
        creater.setLayoutID(R.layout.state);

        /*注冊全局狀態,建議在自定義 Application 類中進行此操作,狀態名最好使用靜態常量聲明*/

        StateRecord.registGlobalState(GLOBAL_STATE_0,true);//注冊一個全局狀態,狀態名為 “GS_0” ,初始狀態為 true


        /*通過狀態管理生成一個臨時的狀態記錄*/
        stateRecord = StateManagement.getInstance().getTempStateRecord(null);
    }

    @Override
    protected void onViewInit(Bundle savedInstanceState) {
        /*根據注解解析控件並綁定控件*/
        Analyzer.analyzeView(this);

        /*根據注解監控狀態*/
        Analyzer.analyzeState(stateRecord,this);

        /*為 Button 注冊一個事件*/
        btn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                /*啟動一個線程模擬耗時處理*/
                new Thread(new Runnable() {
                    @Override
                    public void run() {
                        /*模擬通過耗時操作獲得結果*/
                        String result = "123456";

                        /*通知私有狀態發生改變,改變後狀態為 true,附加額外的參數為一個字符串*/
                        stateRecord.changeState(STATE_0,true,result);
                    }
                }).start();
            }
        });



        /*注冊狀態觀察者*/

        /*注冊一個活性狀態觀察者(當 StateRecord 的內部狀態每次變更為 RunState 時,都會自動激活狀態觀察者)*/
        /*將狀態觀察者綁定給監控的全局狀態*/
        /*PassiveObserver 為被動狀態,表示每次狀態激活時都會執行對應狀態的操作,其構造參數表示當 StateRecord 處於非 RunState 時,不執行操作*/
        stateRecord.registActiviteObserver(GLOBAL_STATE_0, new PassiveObserver(false) {
            /*當處於 true 狀態時執行的操作*/
            @Override
            protected void trueStateUpdate(Object... arg) {
                /*將 TextView 的文本置為 HelloWord */
                tv.setText("HelloWord!");
            }

            /*當處於 false 狀態時執行的操作*/
            @Override
            protected void falseStateUpdate(Object... arg) {
                //不執行任何操作
            }
        });

        /*注冊一個惰性狀態觀察者(當 StateRecord 的內部狀態每次變更不會自動激活狀態觀察者)*/
        /*將狀態觀察者綁定給監控的私有狀態*/
        /*PassiveObserver 為被動狀態,表示每次狀態激活時都會執行對應狀態的操作,其構造參數表示當 StateRecord 處於非 RunState 時,不執行操作*/
        stateRecord.registInactiveObserver(STATE_0, new PassiveObserver(false) {
            /*當處於 true 狀態時執行的操作*/
            @Override
            protected void trueStateUpdate(Object... arg) {
                /*將 TextView 的文本置為傳遞過來的參數 */
                String result = (String) arg[0];
                tv.setText(result);
            }

            /*當處於 false 狀態時執行的操作*/
            @Override
            protected void falseStateUpdate(Object... arg) {
                //不執行任何操作
            }
        });
    }


    /*監控狀態記錄內部狀態回調*/

    @Override
    protected void onResume() {
        super.onResume();
        /*當宿主處於繼續狀態時,StateRecord變更狀態為 RunState */
        stateRecord.setRunState();
    }

    @Override
    protected void onPause() {
        super.onPause();
        /*當宿主處於暫停狀態時,StateRecord變更狀態為 StopState */
        stateRecord.setStopState();
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        /*當宿主處於暫停狀態時,StateRecord變更狀態為 DestoryState */
        stateRecord.setDestroyState();
    }
}

 

state.xml



    

 


執行效果:

\

其他

使用此框架大大減少了類與類之間密切的耦合,提高了代碼的可閱讀性和明確性。有什麼需要改進的地方還請多多指教,大家共同學習。如果您有更好的想法歡迎您踴躍參與其中,我會認真考慮您的建議,謝謝~~~

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved