分类 Android 下的文章

动态实现应用ICON切换-已落地

设计

  1. 每次预埋需删除之前预埋的ICON,使用设计提供的新图
  2. 存在三种情况:

    • 老版本预埋ICON数量 = 新版本预埋ICON数量,需要执行以下两步:

      • 修改AndroidManifest.xml文件中activity-alias的android:icon值
      • 替换{@link IconChangeManager#getActivityPath}方法中iconType的case值
    • 老版本预埋ICON数量 < 新版本预埋ICON数量,需要执行以下三步:

      • 修改AndroidManifest.xml文件中原有activity-alias的android:icon值,并新增多余的activity-alias节点
      • 为{@link IconChangeManager#ACTIVITY_PATH_ARR}添加新增activity-alias的name
      • 替换{@link IconChangeManager#getActivityPath}方法中iconType的case值,并新增多余的case
    • 老版本预埋ICON数量 > 新版本预埋ICON数量,需要执行以下两步:

      • 修改AndroidManifest.xml文件中原有activity-alias的android:icon值,多余的activity-alias节点不能删除
      • 替换{@link IconChangeManager#getActivityPath}方法中iconType的case值,并删除多余的case

- 阅读剩余部分 -

知识点

  1. ViewModelProviders:ViewModelProvider的工厂方法。
  2. ViewModelProvider:工具类,通过反射的方式创建ViewModel。
  3. AndroidViewModelFactory:ViewModelProvider的静态内部类 ,全局单例只有一个 ,用于实现反射创建ViewModel。
  4. ViewModelStores:ViewModelStore的工厂方法类。
  5. ViewModelStore:使用HashMap存储ViewModel,key为:“DEFAULT_KEY + ":" + canonicalName”。
  6. HolderFragment:系统为你的Activity添加一个具有提供ViewModelStore的Fragment,并且因为这个Fragment调用了setRetainInstance(true),所以它能够跨越activity的生命周期。

使用

ViewModelProviders.of(getActivity()).get(MainViewModel.class);

- 阅读剩余部分 -

使用

创建ViewModel

//继承ViewModel,创建LiveData
public class NameViewModel extends AndroidViewModel {

    private MutableLiveData<String> liveData;

    public MutableLiveData<String> getData() {
        if (liveData== null) {
            liveData= new MutableLiveData<String>();
        }
        return liveData;
    }

}

注册Observer

//注册观察者,监听LiveData数据变化
viewModel.getData().observe(this, new Observer<String>() {
    @Override
    public void onChanged(@Nullable String s) {
        mainFragmentText.setText(s);
    }
});

设置数据

//设置数据
if (viewModel.getData().getValue() != null && viewModel.getData().getValue().equals("world")) {
    viewModel.getData().setValue("hello");
} else {
    viewModel.getData().setValue("world");
}

- 阅读剩余部分 -

对于LifeCycle的简单使用可以看上一篇文章:LiveData+ViewModel+Repository搭建MVVM

这篇文章主要是为了阅读源码,尽量深入阅读,能力还是一般,见谅:

LifeCycle的作用

解决onCreate等生命周期方法,由于各种原因,后期越来越臃肿的问题。

关键类阐述

LifecycleRegistryOwner/LifecycleOwner

在Activity等组件生命周期发生变化的时候,发出相应的Event给LifecycleRegistry。

LifecycleRegistry

控制state的转换、接受分发Event事件。

LifecycleObserver

通过注解绑定Event和自定义的函数,实现对生命周期的监听并处理。

Event

@SuppressWarnings("WeakerAccess")
public enum Event {
    /**
     * Constant for onCreate event of the {@link LifecycleOwner}.
     */
    ON_CREATE,
    /**
     * Constant for onStart event of the {@link LifecycleOwner}.
     */
    ON_START,
    /**
     * Constant for onResume event of the {@link LifecycleOwner}.
     */
    ON_RESUME,
    /**
     * Constant for onPause event of the {@link LifecycleOwner}.
     */
    ON_PAUSE,
    /**
     * Constant for onStop event of the {@link LifecycleOwner}.
     */
    ON_STOP,
    /**
     * Constant for onDestroy event of the {@link LifecycleOwner}.
     */
    ON_DESTROY,
    /**
     * An {@link Event Event} constant that can be used to match all events.
     */
    ON_ANY
}

- 阅读剩余部分 -

什么是LiveData

LiveData is an observable data holder class. Unlike a regular observable, LiveData is lifecycle-aware, meaning it respects the lifecycle of other app components, such as activities, fragments, or services. This awareness ensures LiveData only updates app component observers that are in an active lifecycle state.
Source:https://developer.android.com/topic/libraries/architecture/livedata.html

什么是ViewModel

The ViewModel class is designed to store and manage UI-related data in a lifecycle conscious way. The ViewModel class allows data to survive configuration changes such as screen rotations.
Source:https://developer.android.com/topic/libraries/architecture/viewmodel

ViewModel的生命周期

ViewModel的生命周期



- 阅读剩余部分 -