亚洲视频二区_亚洲欧洲日本天天堂在线观看_日韩一区二区在线观看_中文字幕不卡一区

公告:魔扣目錄網(wǎng)為廣大站長提供免費(fèi)收錄網(wǎng)站服務(wù),提交前請(qǐng)做好本站友鏈:【 網(wǎng)站目錄:http://www.430618.com 】, 免友鏈快審服務(wù)(50元/站),

點(diǎn)擊這里在線咨詢客服
新站提交
  • 網(wǎng)站:51998
  • 待審:31
  • 小程序:12
  • 文章:1030137
  • 會(huì)員:747

組件化定義

組件化是建立在模塊化思想上的一次演進(jìn),一個(gè)變種。組件化本來就是模塊化的概念。核心是模塊角色的可轉(zhuǎn)化換性,在打包時(shí),是library;調(diào)試時(shí),是Application。

組件化的單位是組件,這里跟模塊化的一個(gè)最大的區(qū)別就是組件之間是可以相互進(jìn)行跳轉(zhuǎn)的,其實(shí)現(xiàn)就是通過路由,這個(gè)在之后會(huì)手動(dòng)來實(shí)現(xiàn)這個(gè)路由的功能。它是一個(gè)編譯時(shí)的行為

組件化架構(gòu)搭建——鋪路Android架構(gòu)師

 

組件化優(yōu)點(diǎn):

  • 可重用
  • 代碼簡潔
  • 易測試

為什么使用組件化

一直使用單工程操作,項(xiàng)目越來越大導(dǎo)致出現(xiàn)了不少的問題:

  1. 查找問題慢:定位問題,需要在多個(gè)代碼混合的模塊中尋找和跳轉(zhuǎn)。
  2. 開發(fā)維護(hù)成本增加:避免代碼的改動(dòng)影響其它業(yè)務(wù)的功能,導(dǎo)致開發(fā)和維護(hù)成本不斷增加。
  3. 編譯時(shí)間長:項(xiàng)目工程越大,編譯完整代碼所花費(fèi)的時(shí)間越長。
  4. 開發(fā)效率低:多人協(xié)作開發(fā)時(shí),開發(fā)風(fēng)格不一,又很難將業(yè)務(wù)完全分割,大家互相影響,導(dǎo)致開發(fā)效率低下。
  5. 代碼復(fù)用性差:寫過的代碼很難抽離出來再次利用。

組件化項(xiàng)目整體結(jié)構(gòu)

組件化架構(gòu)搭建——鋪路Android架構(gòu)師

 

COMPONENTLIB2 LIBRARY項(xiàng)目結(jié)構(gòu)

組件化架構(gòu)搭建——鋪路Android架構(gòu)師

 

BUILD.GRADLE

apply plugin: 'com.Android.library'

android {
    compileSdkVersion 28



    defaultConfig {
        minSdkVersion 15
        targetSdkVersion 28
        versionCode 1
        versionName "1.0"

        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"

    }

    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android-optimize.txt'), 'proguard-rules.pro'
        }
    }

}

dependencies {
    implementation fileTree(dir: 'libs', include: ['*.jar'])

    implementation 'com.android.support:appcompat-v7:28.0.0'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
}

1234567891011121314151617181920212223242526272829303132333435

APPCONFIG

package com.example.componentlib2;

public class AppConfig {
    public static final String[] COMPONENTS = {
            "com.example.logincomponent.LoginApplication",
            "com.example.minecomponent.MineApplication"
    };
}

123456789

IAPPCOMPONENT

package com.example.componentlib2;

import android.app.Application;

public interface IAppComponent {
    void initalliza(Application app);
}

12345678
package com.example.componentlib2;

import android.content.Context;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;

public interface ILoginService {

    // 跳轉(zhuǎn) 從主 app  跳轉(zhuǎn)到 login app
    void launch(Context context, String targetClass);

    //獲取數(shù)據(jù)主app從login app 獲取返回?cái)?shù)據(jù)并顯示
    Fragment newUserInfoFragment(FragmentManager fragmentManager, int viewId, Bundle bundle);

}

1234567891011121314151617

IMINESERVICE

package com.example.componentlib2;

import android.content.Context;

public interface IMineService {
    void launch(Context context,int userId);
}

12345678

SERVICEFACTORY

package com.example.componentlib2;

public class ServiceFactory {
    private static final ServiceFactory instance = new ServiceFactory();

    public static ServiceFactory getInstance() {
        return instance;
    }

    private ServiceFactory() {

    }

    private ILoginService mLoginService;
    private IMineService mMineService;


    public ILoginService getLoginService() {
        return mLoginService;
    }

    public void setLoginService(ILoginService mLoginService) {
        this.mLoginService = mLoginService;
    }

    public IMineService getMineService() {
        return mMineService;
    }

    public void setMineService(IMineService mMineService) {
        this.mMineService = mMineService;
    }
}

12345678910111213141516171819202122232425262728293031323334

LOGINCOMPONENT 組件

組件化架構(gòu)搭建——鋪路Android架構(gòu)師

 

LOGINACTIVITY

package com.example.logincomponent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class LoginActivity extends AppCompatActivity {

    public static String EXTRA_TARGET_CLASS = "extra_target_class";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.login_main);
    }
}

123456789101112131415

LOGINAPPLICATION

package com.example.logincomponent;

import android.app.Application;

import com.example.componentlib2.IAppComponent;
import com.example.componentlib2.ServiceFactory;

public class LoginApplication extends Application implements IAppComponent {

    private static Application application;

    public static Application getApplication() {
        return application;
    }

    // 當(dāng) login 是 application 的時(shí)候 調(diào)用 initalliza 方法時(shí),上下文指向的就是 LoginApplication
    @Override
    public void onCreate() {
        super.onCreate();
        initalliza(this);
    }

    //當(dāng) login是 lib 的時(shí)候 被主 App 調(diào)用被賦值
    @Override
    public void initalliza(Application app) {
        application = app;
        ServiceFactory.getInstance().setLoginService(new LoginService());
    }
}

123456789101112131415161718192021222324252627282930

LOGINSERVICE

package com.example.logincomponent;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentManager;

import com.example.componentlib2.ILoginService;

public class LoginService implements ILoginService {

    @Override
    public void launch(Context context, String targetClass) {
        Intent intent = new Intent(context, LoginActivity.class);
        intent.putExtra(LoginActivity.EXTRA_TARGET_CLASS, targetClass);
        context.startActivity(intent);
    }

    @Override
    public Fragment newUserInfoFragment(FragmentManager fragmentManager, int viewId, Bundle bundle) {
        UserInfoFragment fragment = new UserInfoFragment();
        fragment.setArguments(bundle);
        fragmentManager.beginTransaction().add(viewId, fragment).commit();
        return fragment;
    }
}

12345678910111213141516171819202122232425262728

USERINFOFRAGMENT

package com.example.logincomponent;

import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.support.v4.app.Fragment;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class UserInfoFragment extends Fragment {

    @Nullable
    @Override
    public View onCreateView(@NonNull LayoutInflater inflater, @Nullable ViewGroup container, @Nullable Bundle savedInstanceState) {
        return inflater.inflate(R.layout.userinfo_fragment, null);
    }
}

12345678910111213141516171819

MINECOMPONENT 組件

組件化架構(gòu)搭建——鋪路Android架構(gòu)師

 

MINEACTIVITY

package com.example.minecomponent;

import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

public class MineActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.mineactivity_main);
    }
}

1234567891011121314

MINEAPPLICATION

package com.example.minecomponent;

import android.app.Application;

import com.example.componentlib2.IAppComponent;
import com.example.componentlib2.ServiceFactory;

public class MineApplication extends Application implements IAppComponent {

    private static Application application;

    public static Application getApplication() {
        return application;
    }

    @Override
    public void onCreate() {
        super.onCreate();
        initalliza(this);
    }

    @Override
    public void initalliza(Application app) {
        application = app;
        ServiceFactory.getInstance().setMineService(new MineService());
    }
}

12345678910111213141516171819202122232425262728

MINESERVICE

package com.example.minecomponent;

import android.content.Context;
import android.content.Intent;

import com.example.componentlib2.IMineService;

public class MineService implements IMineService {
    @Override
    public void launch(Context context, int userId) {
        Intent intent = new Intent(context, MineActivity.class);
        intent.putExtra("ID", userId);
        context.startActivity(intent);
    }
}

文末

文章介紹了組件化,以及如何搭建好一個(gè)組件化。本文可能寫的有點(diǎn)粗糙,有關(guān)組件化、熱修復(fù)等進(jìn)入架構(gòu)師的框架搭建,有一套比較系統(tǒng)的Android架構(gòu)核心技術(shù)學(xué)習(xí)進(jìn)階資料,需要的可以私信我發(fā)送“核心筆記”或“手冊(cè)”即可前往獲取全套資料!

分享到:
標(biāo)簽:架構(gòu)師 Android
用戶無頭像

網(wǎng)友整理

注冊(cè)時(shí)間:

網(wǎng)站:5 個(gè)   小程序:0 個(gè)  文章:12 篇

  • 51998

    網(wǎng)站

  • 12

    小程序

  • 1030137

    文章

  • 747

    會(huì)員

趕快注冊(cè)賬號(hào),推廣您的網(wǎng)站吧!
最新入駐小程序

數(shù)獨(dú)大挑戰(zhàn)2018-06-03

數(shù)獨(dú)一種數(shù)學(xué)游戲,玩家需要根據(jù)9

答題星2018-06-03

您可以通過答題星輕松地創(chuàng)建試卷

全階人生考試2018-06-03

各種考試題,題庫,初中,高中,大學(xué)四六

運(yùn)動(dòng)步數(shù)有氧達(dá)人2018-06-03

記錄運(yùn)動(dòng)步數(shù),積累氧氣值。還可偷

每日養(yǎng)生app2018-06-03

每日養(yǎng)生,天天健康

體育訓(xùn)練成績?cè)u(píng)定2018-06-03

通用課目體育訓(xùn)練成績?cè)u(píng)定