Vòng đời của một ứng dụng Android là kiến thức cơ bản mà bất kỳ lập trình viên Android nào cần phải biết. Đây là kiến thức rất quan trọng để phát triển các ứng dụng Android
activity_main.xml
Trong MainActivity.java
Có các hàm chính sau
Ta sẽ override các hàm trạng thái của ứng dụng: show Toast trong hàm Lưu trạng thái trong hàm onPause() và update trạng thái ứng dụng trong hàm onStart()
MainActivity.java
Hình ảnh demo ứng dụng
Kết Luận: Vậy là mình đã demo xong chương trình, các bạn có thể code và tự kiểm tra các trạng thái của ứng dụng nhé
Sau đây mình xin trình bày một ứng dụng nhỏ Life Cycle App về vòng đời của một Android Application
Các thành phần chính của ứng dụng:
- Một Toast-msg để hiện thị trạng thái của ứng dụng : onCreate, onStart, onPause, onResume, onDestry, onRestart, onStop
- Một EditText: cho người dùng nhập màu sắc của background
- SharePreferences lưu trạng thái của ứng dụng, mỗi khi ứng dụng tắt đi bật lại sẽ lưu màu background lần cuối cùng mà người dùng nhập
- Button Exit: kết thúc ứng dụng
- TextView: hiện thị màu background hiện tại
- Khi chạy chương trình, nhiệm vụ của bạn là quan sát trình tự của thông điệp hiển thị khi ứng dụng:
- Load lần đầu tiên
- Click HOME button
- Click BACK hoặc Exit button
- Chạy lại ứng dụng khi xét màu bacground
Bắt đầu code nào :D
Bước 1:
Tạo ứng dụng android trên Android Studio tên Life Cycle Android. Hiện tại mình đang dùng phiên bản Android Studio 2.2.1
Tạo ứng dụng android trên Android Studio tên Life Cycle Android. Hiện tại mình đang dùng phiên bản Android Studio 2.2.1
Bước 2:
Tạo giao diện cho ứng dụng trong file activity_main.xml gồm 3 thành phần:
- Button
- EditText
- TextView
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/activity_main"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
android:orientation="vertical"
tools:context="com.hust.tuanbk.lifecycleandroid.MainActivity">
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:hint="Input Background(Red, Green, Blue, While)"
android:id="@+id/inputColor"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/btExit"
android:layout_marginTop="20dp"
android:layout_gravity="center"
android:text="Exit"/>
<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Color"/>
</LinearLayout>
Trong MainActivity.java
Có các hàm chính sau
- Xử lý sự kiện cho Button Exit
- Lưu trạng thái của ứng dụng dùng SharePreferences
- Update trạng thái của ứng dụng
//set Button Event
btExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
private void saveStateData(String chosenColor){
SharedPreferences myPrefContainer = getSharedPreferences(PREFNAME, Activity.MODE_PRIVATE);
SharedPreferences.Editor myPrefEditor = myPrefContainer.edit();
String key = "chosenBackgroundColor";
String value = textView.getText().toString();
myPrefEditor.putString(key, value);
myPrefEditor.commit();
} //save data
private void updateMeUsingSavedStateData() {
// (in case it exists) use saved data telling backg color
SharedPreferences myPrefContainer = getSharedPreferences(PREFNAME, Activity.MODE_PRIVATE);
String key = "chosenBackgroundColor";
String defaultValue = "white";
if (( myPrefContainer != null ) && myPrefContainer.contains(key)){
String color = myPrefContainer.getString(key, defaultValue);
setBackgroundColor(color, myScreen);
}
}//updateMeUsingSavedStateData
Ta sẽ override các hàm trạng thái của ứng dụng: show Toast trong hàm Lưu trạng thái trong hàm onPause() và update trạng thái ứng dụng trong hàm onStart()
@Override
protected void onDestroy() {
super.onDestroy();
Toast.makeText(getApplicationContext(), "onDestroy", Toast.LENGTH_LONG).show();
}
@Override
protected void onPause() {
super.onPause();
//save state data (background color)
String chosenColor = textView.getText().toString();
saveStateData(chosenColor);
Toast.makeText(getApplicationContext(), "onPause", Toast.LENGTH_LONG).show();
}
@Override
protected void onRestart() {
super.onRestart();
Toast.makeText(getApplicationContext(), "onRestart", Toast.LENGTH_LONG).show();
}
@Override
protected void onStart() {
super.onStart();
updateMeUsingSavedStateData();
Toast.makeText(getApplicationContext(), "onStart", Toast.LENGTH_LONG).show();
}
@Override
protected void onStop() {
super.onStop();
Toast.makeText(getApplicationContext(), "onStop", Toast.LENGTH_LONG).show();
}
MainActivity.java
package com.hust.tuanbk.lifecycleandroid;
import android.app.Activity;
import android.content.SharedPreferences;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.text.Editable;
import android.text.TextWatcher;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.Toast;
import java.util.Locale;
public class MainActivity extends AppCompatActivity {
Button btExit;
EditText editText;
TextView textView;
LinearLayout myScreen;
String PREFNAME = "myPrefFile";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btExit = (Button) findViewById(R.id.btExit);
editText = (EditText) findViewById(R.id.inputColor);
textView = (TextView) findViewById(R.id.textView);
myScreen = (LinearLayout)findViewById(R.id.activity_main);
//set Button Event
btExit.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
finish();
}
});
editText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
}
@Override
public void afterTextChanged(Editable s) {
//set background to selected color
String chosenColor = s.toString().toLowerCase(Locale.US);
textView.setText(chosenColor);
setBackgroundColor(chosenColor, myScreen);
}
});
Toast.makeText(getApplicationContext(), "onCreate", Toast.LENGTH_LONG).show();
}
@Override
protected void onDestroy() {
super.onDestroy();
Toast.makeText(getApplicationContext(), "onDestroy", Toast.LENGTH_LONG).show();
}
@Override
protected void onPause() {
super.onPause();
//save state data (background color)
String chosenColor = textView.getText().toString();
saveStateData(chosenColor);
Toast.makeText(getApplicationContext(), "onPause", Toast.LENGTH_LONG).show();
}
@Override
protected void onRestart() {
super.onRestart();
Toast.makeText(getApplicationContext(), "onRestart", Toast.LENGTH_LONG).show();
}
@Override
protected void onStart() {
super.onStart();
updateMeUsingSavedStateData();
Toast.makeText(getApplicationContext(), "onStart", Toast.LENGTH_LONG).show();
}
@Override
protected void onStop() {
super.onStop();
Toast.makeText(getApplicationContext(), "onStop", Toast.LENGTH_LONG).show();
}
private void saveStateData(String chosenColor){
SharedPreferences myPrefContainer = getSharedPreferences(PREFNAME, Activity.MODE_PRIVATE);
SharedPreferences.Editor myPrefEditor = myPrefContainer.edit();
String key = "chosenBackgroundColor";
String value = textView.getText().toString();
myPrefEditor.putString(key, value);
myPrefEditor.commit();
} //save data
private void updateMeUsingSavedStateData() {
// (in case it exists) use saved data telling backg color
SharedPreferences myPrefContainer = getSharedPreferences(PREFNAME, Activity.MODE_PRIVATE);
String key = "chosenBackgroundColor";
String defaultValue = "white";
if (( myPrefContainer != null ) && myPrefContainer.contains(key)){
String color = myPrefContainer.getString(key, defaultValue);
setBackgroundColor(color, myScreen);
}
}//updateMeUsingSavedStateData
private void setBackgroundColor(String chosenColor, LinearLayout myScreen) {
//hex color codes: 0xAARRGGBB AA:transp, RR red, GG green, BB blue
if (chosenColor.contains("red"))
myScreen.setBackgroundColor(0xffff0000); //Color.RED
if (chosenColor.contains("green"))
myScreen.setBackgroundColor(0xff00ff00); //Color.GREEN
if (chosenColor.contains("blue"))
myScreen.setBackgroundColor(0xff0000ff); //Color.BLUE
if (chosenColor.contains("white"))
myScreen.setBackgroundColor(0xffffffff); //Color.WHITE
}
}
Hình ảnh demo ứng dụng
Kết Luận: Vậy là mình đã demo xong chương trình, các bạn có thể code và tự kiểm tra các trạng thái của ứng dụng nhé