溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

android主流框架的特性是什么

發(fā)布時間:2022-03-30 10:16:33 來源:億速云 閱讀:200 作者:iii 欄目:移動開發(fā)

這篇文章主要介紹“android主流框架的特性是什么”,在日常操作中,相信很多人在android主流框架的特性是什么問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”android主流框架的特性是什么”的疑惑有所幫助!接下來,請跟著小編一起來學(xué)習(xí)吧!

特性

  • 自動生成MVP,Dagger2相關(guān)類

  • 版本更新

  • 更新日志

  • 通用框架,適合所有類型的項目,支持大型項目的開發(fā),Demo的包結(jié)構(gòu)直接可以拿來用

  • 全部使用Dagger2管理(將所有模塊使用Dagger連接起來,絕不是簡單的使用)

  • 大量使用Rxjava

  • 修改包名(common包不要修改)后就可以直接使用,快速接入(老項目接入請按下面的步驟)

  • 全部UI自適應(yīng)

  • 圖片加載類ImageLoader使用策略模式和建造者模式,輕松切換圖片加載框架和功能擴(kuò)展

  • Model層提供Retrofit API和RxCache,是否使用緩存自行選擇

  • 全局http Request(請求參數(shù),headers)  Response(服務(wù)器返回的結(jié)果,headers,耗時)信息監(jiān)聽,可解析json后根據(jù)狀態(tài)碼做相應(yīng)的全局操作

  • 全局Rxjava錯誤處理,錯誤后自動重試,捕捉整個應(yīng)用的所有錯誤

框架結(jié)構(gòu)

android主流框架的特性是什么

包結(jié)構(gòu)

android主流框架的特性是什么

開發(fā)須知

  • 開發(fā)者需要具有一定的Android開發(fā)能力

  • 開發(fā)者必須有使用Dagger2,Rxjava,Retrofit的經(jīng)驗,沒使用過也必須了解,不然很難使用

Libraries簡介

  1. MvpGoogle官方出品的Mvp架構(gòu)項目,含有多個不同的架構(gòu)分支(此為Dagger分支).

  2. Dagger2Google根據(jù)Square的Dagger1出品的依賴注入框架,通過apt動態(tài)生成代碼,性能優(yōu)于用反射技術(shù)依賴注入的框架.

  3. Rxjava提供優(yōu)雅的響應(yīng)式Api解決異步請求.

  4. RxAndroid為Android提供響應(yīng)式Api.

  5. Rxlifecycle在Android上使用rxjava都知道的一個坑,就是生命周期的解除訂閱,這個框架通過綁定activity和fragment的生命周期***解決.

  6. RxbindingJakeWharton大神的View綁定框架,優(yōu)雅的處理View的響應(yīng)事件.

  7. RxCache是使用注解為Retrofit加入二級緩存(內(nèi)存,磁盤)的緩存庫

  8. RetrofitSquare出品的網(wǎng)絡(luò)請求庫,極大的減少了http請求的代碼和步驟.

  9. Okhttp同樣Square出品,不多介紹,做Android都應(yīng)該知道.

  10. Autolayout鴻洋大神的Android全尺寸適配框架.

  11. GsonGoogle官方的Json Convert框架.

  12. ButterknifeJakeWharton大神出品的view注入框架.

  13. Androideventbus一個輕量級使用注解的Eventbus.

  14. TimberJakeWharton大神出品Log框架,內(nèi)部代碼極少,但是思想非常不錯.

  15. Glide此庫為本框架默認(rèn)封裝圖片加載庫,可參照著例子更改為其他的庫,Api和Picasso差不多,緩存機(jī)制比Picasso復(fù)雜,速度快,適合處理大型圖片流,支持gfit,F(xiàn)resco太大了!,在5.0一下優(yōu)勢很大,5.0以上系統(tǒng)默認(rèn)使用的內(nèi)存管理和Fresco類似.

  16. Realm速度和跨平臺性使它成為如今最火的數(shù)據(jù)庫,美中不足的就是so庫太大

  17. LeakCanarySquare出品的專門用來檢測Android和Java的內(nèi)存泄漏,通過通知欄提示內(nèi)存泄漏信息

  18. RxErroHandlerRxjava錯誤處理庫,可在出現(xiàn)錯誤后重試

1 開發(fā)準(zhǔn)備

此框架適合自己做定制修改,所有暫時不上傳至Jcenter或Maven,請自行下載或clone

1.1 導(dǎo)入框架

compile project(':arms')

1.2 引用config.build

本框架提供一個引用大量第三方庫的config.gradle文件,用于第三方庫版本管理,將config.gradle復(fù)制進(jìn)根目錄,并在項目的***build.gradle中引用它

android主流框架的特性是什么

1.2.1 使用config.build

因為在***build.gradle中引用了它,所以在整個項目的所有build.gradle中都可以使用rootProject.xxx來使用它里面的內(nèi)容

android主流框架的特性是什么

也可以使用它來管理一些項目的信息,這樣有多個module也可以直接使用一個信息

android主流框架的特性是什么

1.3 依賴Dagger2

本框架全部使用Dagger2管理,所以必須依賴Dagger2,找到app的build.gradle,加入如下代碼

android主流框架的特性是什么android主流框架的特性是什么

1.4 配置AndroidManifest

1.4.1 添加權(quán)限

android主流框架的特性是什么

1.4.2 配置Autolayout Meta

使用Autolayout 自適應(yīng)框架必須配置Meta屬性及設(shè)計圖的寬高,詳情參考Autolayout

android主流框架的特性是什么

1.4.3 引用Glide自定義屬性

本框架默認(rèn)使用Glide加載圖片,但提供一個管理器ImageLoader提供統(tǒng)一接口,使用策略者模式可輕松替換圖片加載框架,本框架默認(rèn)提供Glide的自定義緩存配置信息,使用它之前先引用它的自定義配置信息

<!--glide配置-->        <meta-data            android:name="com.jess.arms.widget.imageloader.glide.GlideConfiguration"            android:value="GlideModule"/>

1.5 混淆

由于本框架依賴大量三方庫,所以已經(jīng)在arms Module下的proguard-rules.pro中提供了所有規(guī)則,如果想使用它,請復(fù)制它替換app  Module中的proguard-rules.pro,混淆時可以根據(jù)自己的需求修改或添加規(guī)則,混淆前務(wù)必注意將Java Bean,自定義組件添加進(jìn)規(guī)則

1.6 版本更新

! 一定不能修改common包的包名,舊版本需要找到和common包下同名的類并刪除,然后重

新引用common包里的類

如果你獲得本框架的方式是通過clone或者下載:

  1. 直接可以通過命令行g(shù)it pull origin master拉取***的版本并自動合并

  2. 如果你修改了包名還得執(zhí)行命令git rm --cache -r  app/src/main/java/me/jessyan/mvparms,下次拉取時就不會拉取Demo的內(nèi)容

如果你獲得本框架的方式是通過fork到自己倉庫后,clone或下載:

  1. git remote add arms https://github.com/JessYanCoding/MVPArms.git  添加遠(yuǎn)程倉庫,arms是遠(yuǎn)程倉庫的代號,可自定義,以后都通過這個代號對遠(yuǎn)程倉庫作操作

  2. git fetch arms拉取遠(yuǎn)程倉庫***的版本

  3. git merge arms/master --allow-unrelated-histories合并遠(yuǎn)程倉庫到當(dāng)前分支

  4. 后面如果本框架有更新就只用重復(fù)2,3步,--allow-unrelated-histories只用在***次合并時添加

  5. 如果你修改了包名還得執(zhí)行命令git rm --cache -r  app/src/main/java/me/jessyan/mvparms,下次拉取時就不會拉取Demo的內(nèi)容

2 快速開始

2.1 繼承BaseApplication

新建項目的Application繼承自BaseApplication,并在AndroidManifest中聲明

android主流框架的特性是什么

2.1.1 AppComponent

Application生命周期是和App是一樣的,所以是適合提供一些單例對象,本框架使用Dagger2管理,所以使用AppComponent來提供全局所有的單例對象

創(chuàng)建AppComponent接口

android主流框架的特性是什么

  • 構(gòu)造AppComponent對象 

android主流框架的特性是什么

  • ServiceModule(提供RetrofitApi)和CacheModule(提供緩存)都需自行創(chuàng)建,詳情ServiceModule(2.1.2)  ,CacheModule(2.1.3)

2.1.2 ServiceModule

ServiceModule提供RetrofitApi對應(yīng)的Service,這些Service對象在AppComponent中注入ServiceManager(需繼承BaseServiceManager)中統(tǒng)一管理

  • 自行定義Retrofit Service如下,熟練Retrofit請忽略

public interface CommonService {     String HEADER_API_VERSION = "Accept: application/vnd.github.v3+json";     @Headers({HEADER_API_VERSION})    @GET("/users")    Observable<List<User>> getUsers(@Query("since") int lastIdQueried, @Query("per_page") int perPage); }
  • 定義ServiceModule,這里使用Retrofit對象(ClientModule提供)實例化Service接口,提供所有Service對象(可以根據(jù)不同的邏輯劃分多個Service接口)

@Module public class ServiceModule {     @Singleton    @Provides    CommonService provideCommonService(Retrofit retrofit) {        return retrofit.create(CommonService.class);    }  }
  • AppComponent將所有的Service注入到ServiceManager中,所有Model層都可以拿到此對象,意味著每個Model都可以請求任意Api 

android主流框架的特性是什么

2.1.3 CacheModule

Cache層默認(rèn)使用RxCache,CacheModule提供RetrofitApi對應(yīng)的Cache對象,這些Cache對象在AppComponent中注入CacheManager(需繼承BaseCacheManager)中統(tǒng)一管理

  • 自行定義RxCache Provider如下,熟練RxCache請忽略

public interface CommonCache {     @LifeCache(duration = 2, timeUnit = TimeUnit.MINUTES)    Observable<Reply<List<User>>> getUsers(Observable<List<User>> oUsers, DynamicKey idLastUserQueried, EvictProvider evictProvider);  }
  • 定義CacheModule,這里使用RxCache對象(ClientModule提供)實例化所有Cache接口,提供所有Cache對象

@Module public class CacheModule {     @Singleton    @Provides    CommonCache provideCommonService(RxCache rxCache) {        return rxCache.using(CommonCache.class);    }  }
  • AppComponent將所有的Cache注入到CacheManager中,所有Model層都可以拿到所有的Cache對象 

android主流框架的特性是什么

2.2 繼承BaseActivity

讓項目的基類Activity繼承BaseActivity,BaseActivity默認(rèn)注入Presenter,所以如果要使用Presenter必須指定對應(yīng)的范型,并且提供注入Presenter所需要的Component

android主流框架的特性是什么

2.3 繼承BaseFragment

讓項目的基類Fragment繼承BaseFragment,BaseFragment默認(rèn)注入Presenter,所以如果要使用Presenter必須指定對應(yīng)的范型,并且提供注入Presenter所需要的Component

android主流框架的特性是什么

2.4 MVP實戰(zhàn)

定義業(yè)務(wù)邏輯MVP,繼承MVP各自的基類即可,這里可以稍微粗力度的定義MVP類,即無需每個Fragment和Activity(每個頁面)都定義不同的MVP類,可以按照相同的業(yè)務(wù)邏輯使用一組MVP類

2.4.1 Contract

這里根據(jù)Google官方的MVP項目,可以在Contract中定義MVP的接口,便于管理,此框架無需定義Presenter接口,所以Contract只定義Model和View的接口

android主流框架的特性是什么

2.4.2 View

一般讓Activity或Fragment實現(xiàn)Contract中定義的View接口,供Presenter調(diào)用對應(yīng)方法操作UI,BaseActivity默認(rèn)注入Presenter,如想使用Presenter,必須指定Presenter的范型,和實現(xiàn)setupActivityComponent來提供Presenter需要的Component和Module

android主流框架的特性是什么

2.4.3 Model

Model實現(xiàn)Contract的Model接口,并且繼承BaseModel,指定范型為,上面定義的ServiceManager和CacheManager,然后通過兩個Manager拿到需要的Service和Cache為Presenter提供需要的數(shù)據(jù)(是否使用緩存請自行選擇)

android主流框架的特性是什么

2.4.4 Presenter

Presenter在MVP中的大部分的作用為通過從Model層接口獲取數(shù)據(jù),在調(diào)用View層接口顯示數(shù)據(jù),首先實現(xiàn)BasePresenter,指定Model和View的范型,注意一定要指定Contract中定義的接口,Presenter需要的Model和View,都使用Dagger2注入,這樣即解藕又方便測試,怎么注入?

android主流框架的特性是什么

2.4.5 MVP Module

這里的Module提供當(dāng)前業(yè)務(wù)邏輯對應(yīng)的View和Model接口(Contract中定義的接口)的實現(xiàn)類,Model需要AppComponent中提供的ServiceManager和CacheManager來實現(xiàn)網(wǎng)絡(luò)請求和緩存,所以需要通過Component依賴AppComponent拿到這兩個Manager

android主流框架的特性是什么

2.4.6 MVP Component

這里需要注意的是此Component必須依賴AppComponent,這樣才能提供Model需要的ServiceManager和CacheManager,提供inject()方法就能將Module及AppComponent中提供的對象注入到對應(yīng)的類中,inject()中的參數(shù)不能是接口,怎么注入?

@ActivityScope @Component(modules = UserModule.class,dependencies = AppComponent.class) public interface UserComponent {    void inject(UserActivity activity); }

2.4.7 Dagger Scope

在上面的代碼中ActivityScope大量出現(xiàn)在Module和Component中,Dagger2使用Scope限制每個Module中提供的對象的生命,Dagger2默認(rèn)只提供一個@SingletonScope即單例,本框架提供@ActvityScope和@FragmentScope,如有其他需求請自行實現(xiàn),Module和Component定義相同的Scope后Module中提供的對象的生命周期會和Component中一樣(即在Component生命周期內(nèi),如需使用到Moudle中提供的對象,只會調(diào)用一次@Provide注解的方法得到此對象)

2.4.8 MVP總結(jié)

以后每個業(yè)務(wù)邏輯都重復(fù)構(gòu)造這些類,只是換個名字而已,值得注意的是MVP剛開始用時確實會覺得平白無故多了很多類,非常繁瑣麻煩,但是等頁面代碼邏輯越來多時,你會發(fā)現(xiàn)其中的好處,邏輯清晰,解耦,便于團(tuán)隊協(xié)作,測試容易,錯誤好定位,所以現(xiàn)在本框架提供Template自動生成代碼解決這個痛點,讓開發(fā)者更加愉快的使用本框架

3 功能使用

3.1 App全局配置信息(使用Dagger注入)

GlobeConfigModule使用建造者模式將App的全局配置信息封裝進(jìn)Module(使用Dagger注入到需要配置信息的地方),可以配置CacheFile,InterCeptor等,因為使用的是建造者模式所以如你有其他配置信息需要使用Dagger注入,直接就可以添加進(jìn)Builder并且不會影響到其他地方

//如需添加個Boolean字段提供給Log工具類,來判斷是否打印Log    @Module    public class GlobeConfigModule {        private Boolean isLog;         private GlobeConfigModule(Buidler buidler) {            this.isLog = builder.isLog        }         public static Buidler buidler() {        return new Buidler();       }         public static final class Buidler {            private Boolean isLog;             private Buidler() {}             //1.給Builder中添加個方法接受isLog字段            public Buidler isLog(Boolean isLog) {              this.isLog = isLog;              return this;           }             public GlobeConfigModule build() {               return new GlobeConfigModule(this);           }         }         //2.使用@Provides,將isLog返回出去,供Dagger注入到Log工具類        @Singleton        @Provides        Boolean provideIsLog() {            return isLog;        }    }

3.2 全局捕捉Http請求和響應(yīng)

通過GlobeConfigModule.globeHttpHandler()方法傳入GlobeHttpHandler

@Override    protected GlobeConfigModule getGlobeConfigModule() {        return GlobeConfigModule                .buidler()                .baseurl(Api.APP_DOMAIN)                .globeHttpHandler(new GlobeHttpHandler() {// 這里可以提供一個全局處理http響應(yīng)結(jié)果的處理類,                    // 這里可以比客戶端提前一步拿到服務(wù)器返回的結(jié)果,可以做一些操作,比如token超時,重新獲取                    @Override                    public Response onHttpResultResponse(String httpResult, Interceptor.Chain chain, Response response) {                        //這里可以先客戶端一步拿到每一次http請求的結(jié)果,可以解析成json,做一些操作,如檢測到token過期后                        //重新請求token,并重新執(zhí)行請求                        try {                            if (!TextUtils.isEmpty(httpResult)) {                                JSONArray array = new JSONArray(httpResult);                                JSONObject object = (JSONObject) array.get(0);                                String login = object.getString("login");                                String avatar_url = object.getString("avatar_url");                                Timber.tag(TAG).w("result ------>" + login + "    ||   avatar_url------>" + avatar_url);                            }                         } catch (JSONException e) {                            e.printStackTrace();                            return response;                        }                          //這里如果發(fā)現(xiàn)token過期,可以先請求***的token,然后在拿新的token放入request里去重新請求                        //注意在這個回調(diào)之前已經(jīng)調(diào)用過proceed,所以這里必須自己去建立網(wǎng)絡(luò)請求,如使用okhttp使用新的request去請求                        // create a new request and modify it accordingly using the new token //                    Request newRequest = chain.request().newBuilder().header("token", newToken) //                            .build();  //                    // retry the request // //                    response.body().close();                        //如果使用okhttp將新的請求,請求成功后,將返回的response  return出去即可                         //如果不需要返回新的結(jié)果,則直接把response參數(shù)返回出去                        return response;                    }                     // 這里可以在請求服務(wù)器之前可以拿到request,做一些操作比如給request統(tǒng)一添加token或者h(yuǎn)eader                    @Override                    public Request onHttpRequestBefore(Interceptor.Chain chain, Request request) {                        //如果需要再請求服務(wù)器之前做一些操作,則重新返回一個做過操作的的requeat如增加header,不做操作則返回request                         //return chain.request().newBuilder().header("token", tokenId) //                .build();                        return request;                    }                })                .build();    }

3.3 全局錯誤處理及發(fā)生錯誤時重新執(zhí)行

如果需要使用Rxjava的全局錯誤處理,需通過GlobeConfigModule.responseErroListener()方法傳入ResponseErroListener,并在每次使用Rxjava調(diào)用subscribe時,使用ErrorHandleSubscriber,并傳入AppComponent中提供的RxErrorHandler,此Subscribe,默認(rèn)已經(jīng)實現(xiàn)OnError方法,如想自定義可以重寫OnError方法

android主流框架的特性是什么

  • 在Rxjava中使用 

android主流框架的特性是什么

3.4 切換圖片請求框架

本框架默認(rèn)使用Glide實現(xiàn)圖片加載功能,使用ImagerLoader提供統(tǒng)一的接口,ImagerLoader使用策略模式和建造者模式,可以動態(tài)切換圖片框架(比如說切換成Picasso),并且加載圖片時傳入的參數(shù)也可以隨意擴(kuò)展(loadImage方法在需要擴(kuò)展參數(shù)時,也不需要改動,全部通過Builder擴(kuò)展,比如你想讓內(nèi)部的圖片加載框架,清除緩存你只需要定義個boolean字段,內(nèi)部根據(jù)這個字段if|else,其他操作同理)

  • 使用ImageLoader必須傳入一個實現(xiàn)了BaseImageLoaderStrategy接口的圖片加載實現(xiàn)類從而實現(xiàn)動態(tài)切換,所以首先要實現(xiàn)BaseImageLoaderStrategy,實現(xiàn)時必須指定一個繼承自ImageConfig的實現(xiàn)類,使用建造者模式,可以儲存一些信息,比如URL,  ImageView,Placeholder等,可以不斷的擴(kuò)展,供圖片加載框架使用 

android主流框架的特性是什么

  • 實現(xiàn)ImageCofig使用建造者模式 

public class PicassoImageConfig extends ImageConfig{     private PicassoImageConfig(Buidler builder) {        this.url = builder.url;        this.imageView = builder.imageView;        this.placeholder = builder.placeholder;        this.errorPic = builder.errorPic;    }     public static Buidler builder() {        return new Buidler();    }      public static final class Buidler {        private String url;        private ImageView imageView;        private int placeholder;        protected int errorPic;         private Buidler() {        }         public Buidler url(String url) {            this.url = url;            return this;        }         public Buidler placeholder(int placeholder) {            this.placeholder = placeholder;            return this;        }         public Buidler errorPic(int errorPic){            this.errorPic = errorPic;            return this;        }         public Buidler imagerView(ImageView imageView) {            this.imageView = imageView;            return this;        }         public PicassoImageConfig build() {            if (url == null) throw new IllegalStateException("url is required");            if (imageView == null) throw new IllegalStateException("imageview is required");            return new PicassoImageConfig(this);        }    } }
  • 在ImageLoader構(gòu)造時可以傳入PicassoImageLoaderStrategy(),也可以通過AppComponent拿到ImageLoader對象后,setLoadImgStrategy(new  PicassoImageLoaderStrategy)替換之前的實現(xiàn)(默認(rèn)使用Glide) 

android主流框架的特性是什么

3.***ndroidEventBus Tag

本框架使用AndroidEventBus實現(xiàn)事件總線,此框架使用注解標(biāo)記目標(biāo)方法,統(tǒng)一將Tag的常量寫到EventBusTag接口中,便于管理,如果要在當(dāng)前對象中使用AndroidEventBus請在需要使用的Activity,Fragment,Presenter中重寫useEventBus(),返回true代表使用,默認(rèn)返回true

3.6 AutoLayout組件

本框架使用AutoLayout框架,實現(xiàn)控件自適應(yīng),此框架要讓組件自適應(yīng),必須讓它的父控件,重新測量,和重寫LayoutParams,而官方只默認(rèn)提供了三個ViewGroup,AutoRelativeLayout,AutoLinearLayout,AutoFrameLayout實現(xiàn)了這些操作,為了方便開發(fā)者使用,本框架提供了一些常用的AutoLayout組件,在框架的widget包下的autolayout包中,在xml中引用即可使子控件自適應(yīng),并且還提供一個  Template(在***面)用于生成自適應(yīng)所需要的的Auto系列View,如需要使ScrollView的子控件自適應(yīng),使用此Template輸入ScrollView,即可生成AutoScrollView,在xml中引用即可

3.7 自定義PopupWindow

框架提供一個建造者模式的自定義PopupWindow組件CustomPopupWindow,自己實現(xiàn)布局后就可以直接使用這個實現(xiàn)PopupWindow,使用建造者模式,隨意擴(kuò)展自定義參數(shù)

3.8 快速實現(xiàn)RecycleView

本框架提供DefaultAdapter和BaseHolder基類快速實現(xiàn)Recycleview.

  • BaseHolder默認(rèn)初始化了ButterKnife和AutoLayout,繼承后不僅可以直接注入View,布局還可以自適應(yīng)屏幕

  • RecycleView默認(rèn)是不提供Item的點擊事件的,使用DefaultAdapter調(diào)用setOnItemClickListener可以實現(xiàn)Item的點擊事件

3.9 權(quán)限管理(適配Android6.0權(quán)限管理)

本框架使用RxPermissions用于權(quán)限管理(適配android6.0),并提供PermissionUtil工具類一行代碼實現(xiàn)權(quán)限請求.適配Android6.0權(quán)限管理詳解

PermissionUtil.launchCamera(new RequestPermission() {            @Override            public void onRequestPermissionSuccess() {                launchCapture();//請求權(quán)限成功后做一些操作            }        }, mRxPermissions, mRootView, mErrorHandler);

3.10 Gradle配置啟動DeBug模式

在主項目(app)的build.gradle中配置是否開啟打印Log或則是否使用LeakCanary,等調(diào)試工具

  • 在build.gradle中配置 

android主流框架的特性是什么

  • 在代碼中使用(比如在application中做一些初始化設(shè)置) 

android主流框架的特性是什么

3.11 AppManager(管理所有的Activity)

AppManager用于管理所有的Activity,內(nèi)部持有一個含有所有存活的Activity(未調(diào)用onDestroy)的List,和一個當(dāng)前在最前端的Activity(未調(diào)用onPause),AppManager封裝有多種方法,可以很方便的對它們進(jìn)行操作,也可以在未持有AppManager的情況下,通過EventBus遠(yuǎn)程遙控它的所有方法,這樣我們可以在整個app的任何地方對任何Activity進(jìn)行全局操作,比如在app請求網(wǎng)絡(luò)超時時讓最前端的Activity顯示連接超時的交互頁面(這個邏輯不用寫到當(dāng)前請求的Activity里,可以在一個單例類里做全局的統(tǒng)一操作,因為可以隨時通過AppManager拿到當(dāng)前的Activity)

遠(yuǎn)程遙控通過EventBuspost  Message實現(xiàn),通過不同的what區(qū)分不同的方法和Handler同理,可以根據(jù)自己的需求適當(dāng)?shù)脑贏ppManager中添加對應(yīng)的方法

android主流框架的特性是什么

到此,關(guān)于“android主流框架的特性是什么”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識,請繼續(xù)關(guān)注億速云網(wǎng)站,小編會繼續(xù)努力為大家?guī)砀鄬嵱玫奈恼拢?/p>

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報,并提供相關(guān)證據(jù),一經(jīng)查實,將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI