Android四大核心組件之Activity

1、活動生命週期

  

 2、生命週期執行介紹

當該頁面(Activity)被啓動時java

會執行onCreate()onStart()onRestart()這三個方法,android

只有當onRestart() 方法執行完後纔會處於一個運行狀態(Activity running)app


 

若是另一個activity 跑到當前正在執行的activity前面了,咱們當前的activity就會執行onPause()方法,好比來電話了長按Home鍵的狀況。dom

若是從onPause()方法返回到activity頁面的時候,會執行一次onResume(),再回到activity。eclipse


 

若是頁面從活動狀態,變爲不可見狀態時,也就是中止狀態時候,ide

會執行onPause()方法後再執行onStop()方法。 函數

若是從onStop()方法處返回到頁面時,佈局

會執行一個onRestart()方法後執行onStart()方法接着再執行onResume()方法後回到頁面。測試

注意:若是處於onStop()或者onPause()方法時候,頁面因爲手機內存低、或者被其餘軟件殺掉的時候,this

再返回頁面時候,會從onCreate()方法開始執行,接着onRestart()、onStart()、onResume()


 onDestroy()方法,被系統關閉的時候或者手動的時候纔會執行,執行完這個方法後,咱們的activity就被完全關閉了。

 

 3、Activity方法定義

活動的整個生命週期由如下Activity方法定義。

 public class Activity extends ApplicationContext {
     protected void onCreate(Bundle savedInstanceState);

     protected void onStart();

     protected void onRestart();

     protected void onResume();

     protected void onPause();

     protected void onStop();

     protected void onDestroy();
 }

  

4、Activity樣式修改

經過添加activity中theme參數能夠修改界面的樣式,

 以下兩個圖,能夠看出添加theme樣式後菜單欄改沒了,固然樣式能夠選擇其餘的,會有不一樣效果。

 

5、Activity的建立與切換

  1.首先新建一個activity頁面,

  用的Android studio,建的比較快,

  若是用eclipse的話須要先建立一個類,而且擴展至Activity,

  而後在AndroidManifest.XML中配置添加頁面,

<activity android:name=".Main2Activity"></activity>

  還要在layout中新建一個內容佈局,而且在建立的類中的onCreate方法中綁定它。

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

  這裏我直接經過Android studio建立,省略以上步驟。

    2.在activity1視圖中建立一個標籤和一個按鈕

  注意ID的寫法,自定義ID得加上@+/

  

  

  接着回到視圖A類,

  編寫如下代碼

執行效果以下,點擊後跳轉到第二個頁面

6、如何關閉掉一個activity

  設計以下,在第二個頁面中拖入一個按鈕,把當前activity關閉掉

  

private Button btnButton;

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

        btnButton =findViewById(R.id.btnClose);
        btnButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                finish();
            }
        });

    }

  點擊關閉後回到頁面一

 

7、activity數據的傳送

 設計思路:在頁面二中建立一個標籤,用來接收來自頁面一的數據,

而後經過按鈕「啓動第二個頁面」把數據帶到頁面二。

1.經過putExtra方法和getStringExtra方法實現簡單的數據傳送。

 

 

2.經過Bundle傳送複雜類型數據

執行效果也是同樣 的。

 8、activity關閉後數據的回調

  當頁面二activity關閉的時候,從頁面二把數據傳回,而後從頁面一得到數據並顯示到頁面一。

   在頁面一想獲得一面二傳回來的數據,這裏就不能用startActivity方法,

  要改用startActivityForResult函數。

  

  而且重載onActivityResult方法,下圖中經過data.getStringExtra獲得視圖二返回的參數

下圖爲視圖二,這裏在finish以前使用setResult將參數傳回

測試以下,先進入視圖一,下圖中TextView 是默認值,當前沒有收到返回值

接着點擊啓動第二個頁面

而後點擊關閉,這裏能夠看到已經獲得了從頁面二返回的數據

9、用到的部分源碼

package com.ali.application.mytest;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

import org.w3c.dom.Text;

public class MainActivity extends AppCompatActivity {

    private Button S2;//定義一個按鈕
    private TextView tRe;//定義一個標籤


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

        S2=findViewById(R.id.S2);//經過findViewById查找視圖中按鈕

        tRe=findViewById(R.id.tRe);

        S2.setOnClickListener(new View.OnClickListener() {//設置一個事件監聽器
            @Override
            public void onClick(View view) {
                //啓動頁面2
                Intent i = new Intent(MainActivity.this,Main2Activity.class);
                //i.putExtra("val","mytest");
                Bundle data=new Bundle();
                data.putString("val","myTest");
                i.putExtras(data);
//                startActivity(i);//要取得返回值的話不能用這個函數
                startActivityForResult(i,0);//這裏的0對應onActivityResult方法中的requestCode

            }
        });
        System.out.println("Create");
    }

    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data) {

        String re=data.getStringExtra("val");

        tRe.setText(re);

        super.onActivityResult(requestCode, resultCode, data);
    }

    @Override
    protected void onStart() {
        super.onStart();
        System.out.println("start");
    }

    @Override
    protected void onResume() {
        super.onResume();
        System.out.println("resume");
    }

    @Override
    protected void onPause() {
        super.onPause();
        System.out.println("pause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        System.out.println("stop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        System.out.println("destroy");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        System.out.println("restart");
    }
}

  

package com.ali.application.mytest;

import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;

public class Main2Activity extends AppCompatActivity {

    private Button btnButton;
    private TextView tOut;//定義一個標籤

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

        btnButton =findViewById(R.id.btnClose);
        btnButton.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {

                Intent i = new Intent();
                i.putExtra("val","testResult");
                setResult(0,i);
                finish();
            }
        });

        tOut =  findViewById(R.id.tOut);

        //tOut.setText(getIntent().getStringExtra("val"));

        Bundle data=getIntent().getExtras();
        tOut.setText(data.getString("val"));

    }
}
相關文章
相關標籤/搜索