jetpack -- LiveData


官方文档

优势
确保界面符合数据状态

LiveData 遵循观察者模式。当生命周期状态发生变化时,LiveData 会通知 Observer 对象。您可以整合代码以在这些 Observer 对象中更新界面。观察者可以在每次发生更改时更新界面,而不是在每次应用数据发生更改时更新界面。

不会发生内存泄露

观察者会绑定到 Lifecycle 对象,并在其关联的生命周期遭到销毁后进行自我清理。

不会因 Activity 停止而导致崩溃

如果观察者的生命周期处于非活跃状态(如返回栈中的 Activity),则它不会接收任何 LiveData 事件。

不再需要手动处理生命周期

界面组件只是观察相关数据,不会停止或恢复观察。LiveData 将自动管理所有这些操作,因为它在观察时可以感知相关的生命周期状态变化。

数据始终保持最新状态

如果生命周期变为非活跃状态,它会在再次变为活跃状态时接收最新的数据。例如,曾经在后台的 Activity 会在返回前台后立即接收最新的数据。

适当的配置更改

如果由于配置更改(如设备旋转)而重新创建了 Activity 或 Fragment,它会立即接收最新的可用数据。

共享资源

您可以使用单一实例模式扩展 LiveData 对象以封装系统服务,以便在应用中共享它们。LiveData 对象连接到系统服务一次,然后需要相应资源的任何观察者只需观察 LiveData 对象。有关详情,请参阅扩展 LiveData。

 def lifecycle_version = "2.1.0"

        // ViewModel and LiveData
        implementation "androidx.lifecycle:lifecycle-extensions:$lifecycle_version"
        // alternatively - just ViewModel
        implementation "androidx.lifecycle:lifecycle-viewmodel:$lifecycle_version" // For Kotlin use lifecycle-viewmodel-ktx
        // alternatively - just LiveData
        implementation "androidx.lifecycle:lifecycle-livedata:$lifecycle_version"
简单使用
用户信息
public class User {
	private String name;
	private int age;

	public User(String name, int age) {
		this.name = name;
		this.age = age;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}
ViewModel+LiveData
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.ViewModel;

public class LiveDataViewModel extends ViewModel {
	MutableLiveData<User> mutableLiveData;

	public MutableLiveData<User> getMutableLiveData() {

		if (mutableLiveData == null) {
			mutableLiveData = new MutableLiveData<>();
			mutableLiveData.setValue(new User("张三", 26));
		}

		return mutableLiveData;
	}

	public void ageAddOne() {
		User user = mutableLiveData.getValue();
		int age = user.getAge();
		age++;
		user.setAge(age);
		mutableLiveData.setValue(user);
	}

}
Activity
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.MutableLiveData;
import androidx.lifecycle.Observer;
import androidx.lifecycle.ViewModelProviders;

public class LiveDataActivity extends AppCompatActivity {

	LiveDataViewModel liveDataViewModel;
	TextView name;
	TextView age;

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

		name = findViewById(R.id.name);
		age = findViewById(R.id.age);

		liveDataViewModel = ViewModelProviders.of(this).get(LiveDataViewModel.class);
		//拿到livedata监听数据变化
		MutableLiveData<User> mutableLiveData = liveDataViewModel.getMutableLiveData();
		mutableLiveData.observe(this, new Observer<User>() {
			@Override
			public void onChanged(User user1) {
				//viewmodel的数据变化时就会触发
				name.setText(user1.getName());
				//age是int类型 ,这是赋值的时候报错
				age.setText(String.valueOf(user1.getAge()));
			}
		});
		User user = mutableLiveData.getValue();
		name.setText(user.getName());
		age.setText(String.valueOf(user.getAge()));

		findViewById(R.id.change).setOnClickListener(new View.OnClickListener() {
			@Override
			public void onClick(View v) {
				liveDataViewModel.ageAddOne();
			}
		});
	}
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值