シングル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インタフェースを実現し、基本的なパッケージを作ることができます.
これらの抽象的な方法は強制的に使用されるサブクラスを実現し,強制的に値を伝達する目的を達成する.
同時にonCreateViewメソッド種で初期化を行うと、サブクラスはButterKnifeにバインドされて試行された後、onBindViewで直接操作することができます.私たちが単一Activityアーキテクチャである以上、コンテナActivityも必要です.
このような簡単な処理によって,コンテナActivityで各種Fragmentのジャンプを行うことができる.特に、LatteDelegateは私の「Android汎用フレームワーク設計と完全な電子商取引アプリ開発」で、私たちの大体の応用構造は、単一Activity+マルチFragment構造に確定しました.
関連ラベル:
著者:傅猿
リンク:http://www.imooc.com/article/18845?block_id=tuijian_wz
出典:慕課網
@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
出典:慕課網