Android Architecture Components

Ken Baldauf

Software Engineer @ Originate

What Components?

  • Lifecycle
    • Owner/Observable
  • LiveData
    • Observable Data Holder
  • Room
    • SQLite Mapping Library
  • ViewModel
    • Survives Configuration Change

Lifecycle Owner/Observer

public class DemoActivity extends Activity implements LifecycleRegistryOwner {
    LifecycleRegistry lifecycleRegistry = new LifecycleRegistry(this);

    @Override
    public LifecycleRegistry getLifecycle() {
        return lifecycleRegistry;
    }

    @Override
    public void onCreate() {
        getLifecycle().addObserver(new DemoObserver());
    }
}
public class DemoObserver implements LifecycleObserver {
    @OnLifecycleEvent(Lifecycle.Event.ON_CREATE)
    public void onCreate() {
    }

    @OnLifecycleEvent({ON_START, ON_STOP})
    public void startOrStop(LifecycleOwner source, Event event) {
    }
}

LiveData

public class DemoLiveData extends LiveData<Boolean> {
   
    BroadcastReceiver networkReceiver = new BroadcastReceiver {
        @Override
        public void onReceive(Context context, Intent intent) {
            final ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
            final NetworkInfo ni = connectivityManager.getActiveNetworkInfo();

            setValue(ni != null && ni.isConnectedOrConnecting());
        }
    };

    @Override
    protected void onActive() {
        registerReceiver(networkReceiver,  new IntentFilter(ConnectivityManager.CONNECTIVITY_ACTION));
    }

    @Override
    protected void onInactive() {
        unregisterReceiver(networkReceiver);
    }
}

Room

@Entity
public class Demo {
    @PrimaryKey
    private int id;

    private String occupation;

    @ColumnInfo(name = "demo_name")
    private String name;
}
@Dao
public interface DemoDao {
    @Query("SELECT * FROM demo")
    List<Demo> getAll();

    @Query("SELECT * FROM demo WHERE id IN (:demoIds)")
    List<Demo> loadAllByIds(int[] demoIds);

    @Insert
    void insertAll(Demo... data);

    @Delete
    void delete(Demo entity);
}

ViewModel

public class DemoViewModel extends ViewModel {
    private List<String> data;
    public List<String> getData() {
        return data;
    }

    public void setData(List<String> data) {
        this.data = data;
    }
}
public class DemoActivity extends Activity {
    public void onCreate() {
        DemoViewModel model = ViewModelProviders.of(this).get(DemoViewModel.class);
    }
}

Android Architecture Components

By Kenneth Baldauf

Android Architecture Components

Overview of the new Android Architecture Components announced at Google I/O 2017

  • 814