シングルActivityアーキテクチャーで、滑らかに楽しめます

19236 ワード

多くの勉強中の学生は、ActivityのライフサイクルとActivity間のジャンプから勉強を始めることが多い.ほとんどのAndroidアプリケーションでは、そのビジネスロジックの分割やシーンの変換もActivityに基づいて行われています.まず、これは絶対的なルールに属しています.結局、Activityの最初の設計も論理を分割し、ページをジャンプすることに基づいています.しかし、GoogleがFragmentを発売してから、このような観念は徐々に薄れつつあり、現在多くの市場で流行しているAppはマルチActivity+マルチFragmentアーキテクチャに基づいており、さらには、Activityのジャンプを捨てて、シングルActivity+マルチFragmentアーキテクチャを採用するメリットが明らかになった.FragmentはActivityよりはるかに少ないシステムリソースを占めており、特に中低端携帯電話ではActivityよりもFragmentの応答速度が2倍に向上している.柔軟性については、Fragmentは断片化されているため、Activityよりも多くの柔軟性を持つ各シーンのライフサイクルと状態を制御しやすくなります.また、Appをタブレットに移植しようとすると、Fragmentは開発量を大幅に削減します.もちろん、Fragmentの穴も大きいです.空のポインタ、異常表示、遷移アニメーション、戻りスタックなどはFragmentの問題で、Githubの巨人は十分に多く、巨人の肩に立って成長することができます.私が好きな「巨人」は、GithubのオープンソースプロジェクトFragmentationで、ここにリンクされています.https://github.com/YoKeyword/FragmentationFragmentationに基づいて、ButterKnifeと組み合わせて簡単なパッケージを行いました.例えば、簡単な抽象クラスの基礎エージェントを作成し、ISupportFragmentインタフェースを実現し、基本的なパッケージを作ることができます.
    @SuppressWarnings("SpellCheckingInspection")
    private Unbinder mUnbinder = null;

    public abstract Object setLayout();

    public abstract void onBindView(@Nullable Bundle savedInstanceState, View rootView);

これらの抽象的な方法は強制的に使用されるサブクラスを実現し,強制的に値を伝達する目的を達成する.
@Nullable
    @Override
    public View onCreateView(LayoutInflater inflater,
                             @Nullable ViewGroup container,
                             @Nullable Bundle savedInstanceState) {
        final View rootView;
        if (setLayout() instanceof Integer) {
            final int layoutResId = (int) setLayout();
            rootView = inflater.inflate(layoutResId, container, false);
        } else if (setLayout() instanceof View) {
            rootView = (View) setLayout();
        } else {
            throw new ClassCastException("typeof setLayout() must be int or View!");
        }
        mUnbinder = ButterKnife.bind(this, rootView);
        onBindView(savedInstanceState, rootView);
        return rootView;
    }

同時にonCreateViewメソッド種で初期化を行うと、サブクラスはButterKnifeにバインドされて試行された後、onBindViewで直接操作することができます.私たちが単一Activityアーキテクチャである以上、コンテナActivityも必要です.
 public abstract LatteDelegate setRootDelegate();

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        ActionBar actionBar =getSupportActionBar();
        if (actionBar != null) {
            actionBar.hide();
        }
        initContainer(savedInstanceState);
    }

    private void initContainer(@Nullable Bundle savedInstanceState) {
        final FrameLayout container = new FrameLayout(this);
        container.setId(R.id.delegate_container);
        container.setFitsSystemWindows(true);
        setContentView(container);
        if (savedInstanceState == null) {
            loadRootFragment(R.id.delegate_container, setRootDelegate());
        }
    }

このような簡単な処理によって,コンテナActivityで各種Fragmentのジャンプを行うことができる.特に、LatteDelegateは私の「Android汎用フレームワーク設計と完全な電子商取引アプリ開発」で、私たちの大体の応用構造は、単一Activity+マルチFragment構造に確定しました.
関連ラベル:
著者:傅猿
リンク:http://www.imooc.com/article/18845?block_id=tuijian_wz
出典:慕課網