今天继续进行了一些 安卓的学习就是如果你关闭后台后继续能够保存数据主要是看关于ViewModel,Lifedata ,还有今天学的Databinding的学习
例子:主要是在后台加减以后再重新开机后不会失去数据
代码:
package com.eb.myapplicationsd;
import androidx.appcompat.app.AppCompatActivity;
import androidx.databinding.DataBindingUtil;
import androidx.lifecycle.SavedStateViewModelFactory;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import com.eb.myapplicationsd.databinding.ActivityMainBinding;
public class MainActivity extends AppCompatActivity {
MyViewModel myViewModel;
ActivityMainBinding binding;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
binding=DataBindingUtil.setContentView(this,R.layout.activity_main);
myViewModel = ViewModelProviders.of(this, new SavedStateViewModelFactory(getApplication(),this)).get(MyViewModel.class);
binding.setData(myViewModel);
binding.setLifecycleOwner(this);
}
@Override
protected void onPause() {
super.onPause();
myViewModel.save();
}
}
package com.eb.myapplicationsd;
import android.app.Application;
import android.content.Context;
import android.content.SharedPreferences;
import androidx.annotation.NonNull;
import androidx.lifecycle.AndroidViewModel;
import androidx.lifecycle.LiveData;
import androidx.lifecycle.SavedStateHandle;
import androidx.lifecycle.ViewModel;
public class MyViewModel extends AndroidViewModel {
SavedStateHandle savedStateHandle;
String key=getApplication().getResources().getString(R.string.data_key);
String shpname=getApplication().getResources().getString(R.string.shp_name);
public MyViewModel(@NonNull Application application,SavedStateHandle savedStateHandle) {
super(application);
this.savedStateHandle=savedStateHandle;
if(!savedStateHandle.contains(key))
{
}
}
public LiveData<Integer>getNumber()
{
return savedStateHandle.getLiveData(key);
}
public void load()
{
SharedPreferences sharedPreferences=getApplication().getSharedPreferences(shpname, Context.MODE_PRIVATE);
int x=sharedPreferences.getInt(key,0);
savedStateHandle.set(key,x);
}
public void save()
{
SharedPreferences sharedPreferences=getApplication().getSharedPreferences(shpname,Context.MODE_PRIVATE);
SharedPreferences.Editor editor=sharedPreferences.edit();
editor.putInt(key,getNumber().getValue());
editor.apply();
}
public void add(int x)
{
savedStateHandle.set(key,getNumber().getValue()+x);
}
}
xml中的
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="data"
type="com.eb.myapplicationsd.MyViewModel" />
</data>
<androidx.constraintlayout.widget.ConstraintLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="152dp"
android:text="@{String.valueOf(data.getNumber())}"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="73dp"
android:layout_marginEnd="74dp"
android:text="@string/Button_plue"
android:onClick="@{()->data.add(1)}"
app:layout_constraintBaseline_toBaselineOf="@+id/button2"
app:layout_constraintEnd_toEndOf="@+id/textView"
app:layout_constraintStart_toStartOf="parent" />
<Button
android:id="@+id/button2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="296dp"
android:layout_marginEnd="56dp"
android:onClick="@{()->data.add(-1)}"
android:text="@string/Button_minus"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</layout>
结果:


重新关节后在开启

原文:https://www.cnblogs.com/guziteng1/p/12261400.html