Skip to content

Most visited

Recently visited

added in version 1.0.0
belongs to Maven artifact android.arch.lifecycle:viewmodel:1.1.0


public abstract class ViewModel
extends Object

   ↳ android.arch.lifecycle.ViewModel
Known Direct Subclasses

ViewModel is a class that is responsible for preparing and managing the data for an Activity or a Fragment. It also handles the communication of the Activity / Fragment with the rest of the application (e.g. calling the business logic classes).

A ViewModel is always created in association with a scope (an fragment or an activity) and will be retained as long as the scope is alive. E.g. if it is an Activity, until it is finished.

In other words, this means that a ViewModel will not be destroyed if its owner is destroyed for a configuration change (e.g. rotation). The new instance of the owner will just re-connected to the existing ViewModel.

The purpose of the ViewModel is to acquire and keep the information that is necessary for an Activity or a Fragment. The Activity or the Fragment should be able to observe changes in the ViewModel. ViewModels usually expose this information via LiveData or Android Data Binding. You can also use any observability construct from you favorite framework.

ViewModel's only responsibility is to manage the data for the UI. It should never access your view hierarchy or hold a reference back to the Activity or the Fragment.

Typical usage from an Activity standpoint would be:

 public class UserActivity extends Activity {

     protected void onCreate(Bundle savedInstanceState) {
         final UserModel viewModel = ViewModelProviders.of(this).get(UserModel.class);, new Observer() {
             public void onChanged(@Nullable User data) {
                 // update ui.
         findViewById( View.OnClickListener() {
             public void onClick(View v) {
ViewModel would be:
 public class UserModel extends ViewModel {
     public final LiveData<User> userLiveData = new LiveData<>();

     public UserModel() {
         // trigger user load.

     void doAction() {
         // depending on the action, do necessary business logic calls and update the
         // userLiveData.

ViewModels can also be used as a communication layer between different Fragments of an Activity. Each Fragment can acquire the ViewModel using the same key via their Activity. This allows communication between Fragments in a de-coupled fashion such that they never need to talk to the other Fragment directly.

 public class MyFragment extends Fragment {
     public void onStart() {
         UserModel userModel = ViewModelProviders.of(getActivity()).get(UserModel.class);


Public constructors


Protected methods

void onCleared()

This method will be called when this ViewModel is no longer used and will be destroyed.

Inherited methods

From class java.lang.Object

Public constructors


added in version 1.0.0
ViewModel ()

Protected methods


added in version 1.0.0
void onCleared ()

This method will be called when this ViewModel is no longer used and will be destroyed.

It is useful when ViewModel observes some data and you need to clear this subscription to prevent a leak of this ViewModel.

This site uses cookies to store your preferences for site-specific language and display options.

Get the latest Android developer news and tips that will help you find success on Google Play.

* Required Fields


在微信上关注 Google Developers

Browse this site in ?

You requested a page in , but your language preference for this site is .

Would you like to change your language preference and browse this site in ? If you want to change your language preference later, use the language menu at the bottom of each page.

This class requires API level or higher

This doc is hidden because your selected API level for the documentation is . You can change the documentation API level with the selector above the left navigation.

For more information about specifying the API level your app requires, read Supporting Different Platform Versions.

Take a short survey?
Help us improve the Android developer experience. (Dec 2017 Android Platform & Tools Survey)