Примечание: сразу уточню, что ViewModel — это не замена onSaveInstanceState(Bundle)
Ниже код ViewModel
package ag.krasnov.exampleviewmodel;
import android.util.Log;
import androidx.lifecycle.ViewModel;
public class MyViewModel extends ViewModel {
    private int mCount;
    public int getCount() {
        return mCount;
    }
    public void increment() {
        mCount++;
    }
}
Код Activity
package ag.krasnov.exampleviewmodel;
import androidx.appcompat.app.AppCompatActivity;
import androidx.lifecycle.ViewModelProvider;
import androidx.lifecycle.ViewModelProviders;
import android.os.Bundle;
import android.util.Log;
public class MainActivity extends AppCompatActivity {
    private MyViewModel viewModel;
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        Log.d(Constants.TAG, "активити onCreate");
        viewModel = new ViewModelProvider(this).get(MyViewModel.class);
        viewModel.increment();
    }
    ...
    @Override
    protected void onResume() {
        super.onResume();
        Log.d(Constants.TAG, "активити onResume(" + viewModel.getCount() + ")");
    }
    ...
ViewModel не будет уничтожен до вызова в Activity onDestroy()
Если одну и туже ViewModel добавить вызывать в разных Activity, то она будет своя для каждого экземпляра экрана.