Activity中setResult(int resultCode, Intent data)與onActivityResult(int requestCode, int resultCode, Intent data)方法的調用


關於Activity的生命周期

onCreate(Bundle savedInstanceState):可以進行一些初始化的工作在activity第一次被創建的時候調用。這里是你做所有初始化設置的地方──創建視圖、綁定數據至列表等

onStart():Activity顯示在前台,但還不可與用戶交互

onRestart():在activity停止后,在再次啟動之前被調用

onResume():取得控制權,可以對此Activity進行操作此時activity位於堆棧頂部,並接受用戶輸入

onPause():暫停,可見,但不可操作,此方法主要用來將未保存的變化進行持久化,停止類似動畫這樣耗費CPU的動作等

onStop():當activity不再為用戶可見時調用此方法

onDestroy():在activity銷毀時調用

 Android的Activity是堆棧結構,多個Activity之間的切換順序:

MainActivity跳轉到Another

1 08-25 05:02:47.783: INFO/System.out(339): MainActivity------->onPause()  
2 08-25 05:02:47.843: INFO/System.out(339): Another------->onCreate()  
3 08-25 05:02:47.853: INFO/System.out(339): Another------->onStart()  
4 08-25 05:02:47.853: INFO/System.out(339): Another------->onResume()  
5 08-25 05:02:48.253: INFO/System.out(339): MainActivity------->onStop() 

按Back鍵返回:

1 08-25 05:03:48.133: INFO/System.out(339): Another------->onPause()  
2 08-25 05:03:48.174: INFO/System.out(339): MainActivity------->onRestart()  
3 08-25 05:03:48.174: INFO/System.out(339): MainActivity------->onStart()  
4 08-25 05:03:48.174: INFO/System.out(339): MainActivity------->onResume()  
5 08-25 05:03:48.483: INFO/System.out(339): Another------->onStop()  
6 08-25 05:03:48.483: INFO/System.out(339): Another------->onDestroy()  

第二個Activity使用了finish()方法,返回:

1 08-25 05:10:48.053: INFO/System.out(366): Another------->onPause()  
2 08-25 05:10:48.103: INFO/System.out(366): MainActivity------->onRestart()  
3 08-25 05:10:48.103: INFO/System.out(366): MainActivity------->onStart()  
4 08-25 05:10:48.103: INFO/System.out(366): MainActivity------->onResume()  
5 08-25 05:10:48.423: INFO/System.out(366): Another------->onStop()  
6 08-25 05:10:48.453: INFO/System.out(366): Another------->onDestroy() 

MainActivity需要在Another執行finished()方法獲取傳入的值:

Another中:

Intent it = new Intent();
Bundle bundle = new Bundle();
bundle.putString("result", resultString);
bundle.putParcelable("bitmap", barcode);
it.putExtras(bundle);
this.setResult(RESULT_OK, resultIntent);

setResult方法:

public final void setResult(int resultCode, Intent data) {
        synchronized (this) {
            mResultCode = resultCode;
            mResultData = data;
        }
    }

MainActivity中重寫onActivityResult(int requestCode, int resultCode, Intent data)方法

@Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        switch (requestCode) {
        case SCANNIN_GREQUEST_CODE:
            if(resultCode == RESULT_OK){
                Bundle bundle = data.getExtras();
                //顯示掃描到的內容
                mTextView.setText(bundle.getString("result"));
                //顯示
                mImageView.setImageBitmap((Bitmap) data.getParcelableExtra("bitmap"));
            }
            break;
        }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM