天天看點

Activity 生命周期執行個體

[size=large]Android平台上的軟體普遍的起始界面都是一個歡迎界面,我們看到的可能僅僅隻是一張圖檔或是一些動畫效果。随後才加載登入頁面或是主菜單頁面,但是在我們用手機打開一些Android程式的時候就會發現,如果我們的手機沒有連入網絡的時候,有些程式就會提示“目前網絡不可用”或是“請檢查您的網絡”之類的提示框。原因就是因為在這些程式的歡迎界面啟動的時候去檢查了你目前手機的網絡狀态。并給予對應的提示,但是據我本人一些程式使用體驗中發現,大多數程式的歡迎界面檢查了手機的網絡狀況,提示框有一個确定按鈕,當你點選确定按鈕之後,程式也退出了。是以在最近的一個項目中,我也想在項目歡迎界面中加入這樣的效果,但是不知道其他程式是怎麼實作的,後來自己摸索了下,想出了一個解決方案。就是利用Activity生命周期來實作。在此記錄分享下,也希望大家也分享下自己的實作思路。

我是用真機測試的。

1 建立一個android工程,

建立布局檔案,welcome.xml

然後新增一個activity,命名為WelcomeActivity

當然還有一張歡迎界面的圖檔welcome.png,設定welcome的background為welcome.png,并在Androidmanifest中設定

android:theme="@android:style/Theme.NoTitleBar.Fullscreen"

這行代碼是實作全屏及隐藏标題欄

2 大家都知道Activity的生命周期(如果不是很熟悉的話可以查找相關資料),當一個Activity啟動的時候,首先是執行onCreate()方法,再是onStart()方法,至此界面就呈現出來了。

定義一個檢查網絡狀況的方法 如下:

private boolean CheckNetWork(Activity activity){

ConnectivityManager manager = (ConnectivityManager)activity.getSystemService(Context.CONNECTIVITY_SERVICE);

//檢查網絡

NetworkInfo info = manager.getActiveNetworkInfo();

if(info==null || !info.isConnected()){

return false;

}

if(info.isRoaming()){

return true;

}

return true;

}

3 并在onStart()方法中調用,如下:

@Override

protected void onStart() {

super.onStart();

Log.i(TAG, "ActivityLifeCycle==>onStart");

if(!CheckNetWork(this)){

AlertDialog.Builder builder = new Builder(LogoActivity.this);

builder.setInverseBackgroundForced(true);

builder.setMessage("目前網絡不可用,是否自動前往設定目前網絡").setPositiveButton("是",new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));

}

}).setNegativeButton("否",new DialogInterface.OnClickListener() {

public void onClick(DialogInterface dialog, int which) {

// TODO Auto-generated method stub

WelcomeActivity.this.finish();

}

});

AlertDialog ad = builder.create();

ad.show();

}

else{

//網絡正常,進入主界面

}

}

4 注意:startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));這句話的意思是跳轉到設定無線和網絡面闆。當網絡不可用時,可以讓使用者可以直接跳轉到網絡設定界面,進行網絡設定。當然也可以不設定網絡,退出程式。

需要注意的是跳轉到設定面闆是需要權限的。将下面這行代碼

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>

添加到AndroidManifest.xml中即可

5 下面說下這個執行個體的activity的生命周期過程吧

【1】 最開始啟動程式=>onCreate();

【2】 執行onStart()方法調用網絡檢查。使用者點選是直接跳到無線和網絡設定面闆。

【3】 此時,activity 會依次調用onResume(),onPause(),onStop()方法。

【4】 使用者設定好網絡後,按傳回按鈕。即回來了我們的Android程式(因為我們的程式沒有被Destroyed掉)。

【5】 此刻activity會依次調用onRestart(),onStart(),onResume()。

【6】 此刻裡面有兩個方法是被重複調用了,就是onStart()和onResume()方法。是以我選擇在這兩個方法中做網絡檢查判斷處理。

當然最後我想通過這個思路還可以在歡迎界面做一些其他的處理。就看需求了。

最後總結下,其實就是一個歡迎界面做網絡狀态檢查的功能,加上本人使用者體驗感覺的修改。

[/size]