Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> Activity -- Android學習之路

Activity -- Android學習之路

編輯:關於Android編程

acitivyt 是什麼

引用官方的說法:
是一個應用組件,用戶可與其提供的屏幕進行交互,以執行撥打電話、拍攝照片、發送電子郵件或查看地圖等操作。 每個 Activity 都會獲得一個用於繪制其用戶界面的窗口。窗口通常會充滿屏幕,但也可小於屏幕並浮動在其他窗口之上

創建Activity

要創建Activity 必須繼承自Activity或者Activity的子類。在Activity的各個生命階段實現對應的方法;

其中重要的兩個方法:

onCreate() ,系統在創建Activity時調用此方法;在此方法實現視圖綁定;一些 控件的初始化

onPuase(); 用戶離開當前Activity調用的第一個方法 ,

創建完成後必須在Manifest文件中 聲明此Activity 系統才會知道有這個Activity


  
      
      ...
  
  ...

如果有需要也可以為此Activity添加IntentFilter(IntentFilter稍後我會再做總結),以供外部程序來啟動,一般同一應用中不會用到隱式啟動。


    
    
    

    
    
    

    
    

最簡單的Activity 只綁定了一個視圖

public class MainActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}

啟動Activity

可以通過一個intent 來啟動 一個Activity ,關於intent稍後會做總結

明確目標啟動

在明確的指導要啟動的Activity的時候可以顯示使用intent來啟動

Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);

傳遞數據

如果需要傳遞數據,可以在intent中放入數據

Intent intent = new Intent(Intent.ACTION_SEND);
intent.putExtra("origin", "哈哈");
startActivity(intent);

獲取數據

Intent intent = getIntent();//獲取啟動此activity的intent
String origin = intent.getStringExtra("origin");

不明確啟動目標

在不明確要啟動的Activity的時候 可以在intent中添加關於啟動目標的描述和類型,系統會過濾所有的Activity的intentFilter來匹配 ;一般 在同一個應用中不必使用隱式Intent;

例如 我在為A Activity添加這樣的IntentFilter:


    
    
    

    
    
    

    
    

要啟動上面的Activity可以這樣寫

Intent in = new Intent();
////要執行的動作的描述 所有的action中 有一個匹配行
in.setAction("com.skymxc.action.x2");
//附加信息的描述 這裡的描述只要在intentFilter中聲明了就能匹配上,
// 如果有一項未聲明則匹配不上,如果intentFilter中沒有可以不添加,會使用默認的category
in.addCategory("com.skymxc.catagory.c2");
//對數據進行描述 C中定義了協議為 file
in.setDataAndType(Uri.parse("http://"),"audio/13");
if (in.resolveActivity(getPackageManager())!=null){
    //啟動
    startActivity(in);
}else{
    Toast.makeText(this,"系統中不存在可以執行此操作的程序",Toast.LENGTH_SHORT).show();
}

為某個結果啟動一個Activity

如果啟動一個Activit只為獲得某個結果 可以 使用 startActivityForResult() 來啟動一個Activity ,在獲得結果後會回調 方法:onActivityResult();

去圖庫獲取圖片 第二個參數是請求碼 在onActivityResult()中區分結果

Intent intent1 = new Intent(Intent.ACTION_PICK);
intent1.setData(MediaStore.Images.Media.EXTERNAL_CONTENT_URI);
//為了結果去啟動一個Activity
startActivityForResult(intent1,50);

onActivityResult()中獲取到取得的圖片

/**
 *
 * @param requestCode 啟動時的 requestCode
 * @param resultCode 跳轉的activity給的
 * @param data 跳轉的activity給的 返回的數據
 */
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode== 50 && resultCode ==RESULT_OK && data != null){
       Uri uri = data.getData(); //返回是標識符指定圖片所在的位置的統一資源標識符
        img.setImageURI(uri);  //設置給 ImageView
    }
}

保存Activity的狀態

當用戶 離開Activity去往另一個Activity時;Activity會被壓入返回棧,如果內存不夠就會被銷毀 ,當Activity被銷毀後其中的數據當然就沒了,如果需要保留這些數據可調用 方法 onSaveInstanceState()方法

@Override
public void onSaveInstanceState(Bundle outState, PersistableBundle outPersistentState) {
    //存入數據
   outState.putBoolean("checked",true);
}

當此Activity被創建時 就能取出數據了

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (savedInstanceState!=null){
        boolean checked = savedInstanceState.getBoolean("checked");
    }
    setContentView(R.layout.activity_main);
}

Activity的生命周期

看一張圖描述了整個Activity由生到死的一套回調方法
生命周期

回調方法說明

先說一下上圖的方法:
- onCreate() :創建Activity ,可以在這裡進行初始一些視圖和數據
- onStart(): 啟動Activity ,這裡你就可以看到 這個activity了
- onResume(): 調用這個方法前 只能看到Activity 並不能進行交互 ,執行完此方法才可以進行交互 ,整個Activity就徹底的運行起來了
- onPause() :停止用戶交互 你可以看到 但是 不能交互了 比如 啟動另一個透明的Dialog Activity 你可以看到原本的Activity ,但是已經失去了焦點 ,無法交互
- onStop() :當前Activity被覆蓋時調用 例如 當前activity1跳往到activity2 ,activity就會把activity1覆蓋,這時就調用了此方法
- onRestart(); 重新啟動
- onDestroy():activity再結束前調用的最後一個方法;這裡可以進行一些釋放資源的操作

三種階段

完整生命周期:
從調用的第一個方法 onCreate() 到最後調用一個的方法onDestroy() ,在onCreate()方法中可以進行一些全局的配置,UI的引用,數據的初始化,也可以從savedInstanceState中讀取 保存在設備中或者執行reCreate方法前保存的數據等前提savedInstanceSate不為null,在onDestroy()方法中可以 釋放資源等

可視周期:在執行onStart()和onStop()之間 在這期間 你可以在屏幕上看到這個Activity但是 不能再前台跟用戶交互 。只能看,可以理解為於禁用狀態

前台周期:在執行onResume() 和 onPause() 之間,在這期間,用戶就可以在前台和activity交互了。


關於這裡提到的intent ,intentFilter 我會在之後總結。

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved