天天看點

Android四大元件之Activity元件

目錄

​​一:Activity是什麼?​​

​​二:如何建立一個Activity​​

​​三:Activity和Layout以及view之間的關聯​​

​​四:Activity之間的跳轉​​

​​五:Activity啟動模式​​

​​ 六:Activity聲明周期​​

​​七:Activity之間的資料傳輸​​

一:Activity是什麼?

Activity是一個應用程式​​元件​​,提供一個螢幕,使用者可以用來互動為了完成某項任務。

Activity中所有操作都與使用者密切相關,是一個負責與使用者互動的元件,可以通過setContentView(View)來顯示指定控件。

在一個android應用中,一個Activity通常就是一個單獨的螢幕,它上面可以顯示一些控件也可以監聽并處理使用者的事件做出響應。Activity之間通過Intent進行通信。

二:如何建立一個Activity

第一步: 建立一個類繼承AppCompatActivity

public class MainActivity extends AppCompatActivity{

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

第二步: 在Andmainifest中申明這個類

<activity android:name=".MainActivity" android:label="appname">

   
</activity>      

第三步: 如果這個類是主入口需要申明intent-filter

<activity android:name=".MainActivity" android:label="123">

    <intent-filter>
        <action android:name="android.intent.action.MAIN" />

        <category android:name="android.intent.category.LAUNCHER" /> 
    </intent-filter>
</activity>      

三:Activity和Layout以及view之間的關聯

public class MainActivity extends AppCompatActivity{//實作了點選事件接口

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        //activity與layout進行關聯
        setContentView(R.layout.activity_login);
        //通過findViewById将layout中的控件找出來轉成view
        final TextView textView = findViewById(R.id.titleTextview);
        //拿到button這個view
        Button button = findViewById(R.id.button);
        button.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View v) {
                //為textview設定文本
                textView.setText(getString(R.string.app_name));
            }
        });
    }
}      

四:Activity之間的跳轉

public void loginClick(View view){
//通過Intent意圖對象,傳遞參數從目前activity跳轉到目标activity
    Intent intent = new Intent(this,IndexActivity.class);
    //邏輯處理
    startActivity(intent);
}      

五:Activity啟動模式

四種啟動模式

standard:系統預設的啟動模式,棧結構,打開一個activity入棧,再打開下個activity,接着入棧,先進後出的特點,我們平時直接建立的Activity都是這種模式的Activity,這種模式的Activity的特點是:隻要你建立了Activity執行個體,一旦激活該Activity,則會向任務棧中加入新建立的執行個體,退出Activity則會在任務棧中銷毀該執行個體。

Android四大元件之Activity元件

singleTop:如果某個Activity自己激活自己,即任務棧棧頂就是該Activity,則不需要建立,其餘情況都要建立Activity執行個體;

Android四大元件之Activity元件

singleTask:如果要激活的那個Activity在任務棧中存在該執行個體,則不需要建立,隻需要把此Activity放入棧頂,并把該Activity以上的Activity執行個體都pop;

Android四大元件之Activity元件

singleInstance:如果我們将某個activity設定成這個singleStance啟動模式,則當激活這個activity之後單獨放到一個棧,下次再使用的時候,直接使用這個棧,比如打電話應用就是一個singleStance模式啟動的activity

代碼實作有兩種方式

第一種在mainifest.xml中配置,想要的啟動模式

<activity android:name=".IndexActivity" android:launchMode="singleInstance"/>      

第二種在java代碼中設定

Intent intent = new Intent(this,IndexActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK);
//邏輯處理
startActivity(intent);      

 六:Activity聲明周期

onCreate():當我們點選activity的時候,系統會調用activity的oncreate()方法,在這個方法中我們會初始化目前布局setContentLayout()方法。

onStart():onCreate()方法完成後,此時activity進入onStart()方法,目前activity是使用者可見狀态,但沒有焦點,與使用者不能互動,一般可在目前方法做一些動畫的初始化操作。

onResume():onStart()方法完成之後,此時activity進入onResume()方法中,目前activity狀态屬于運作狀态 (Running),可與使用者進行互動。

onPause():當另外一個activity覆寫目前的acitivty時,此時目前activity會進入到onPause()方法中,目前activity是可見的,但不能與使用者互動狀态。

onStop():onPause()方法完成之後,此時activity進入onStop()方法,此時activity對使用者是不可見的,在系統記憶體緊張的情況下,有可能會被系統進行回收。是以一般在目前方法可做資源回收。

onDestroy():onStop()方法完成之後,此時activity進入到onDestory()方法中,結束目前activity。

onRestart():onRestart()方法在使用者按下home()之後,再次進入到目前activity的時候調用。調用順序onPouse()->onStop()->onRestart()->onStart()->onResume().

Android四大元件之Activity元件

七:Activity之間的資料傳輸

當我們在一個Activity打開另一個Activity的時候,如何把目前這個Activity的一些資料帶到即将打開的Activiry,再次關閉打開的Activity時候,如何把資料帶到目前這個Activity?

Activity之間是通過Intent進行通信的。intent.putExtra()這個方法參數有多種可以滿足資料傳輸需求

如下代碼是第一個Activity

public class MainActivity extends AppCompatActivity{//實作了點選事件接口

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_login);
    }
    public void loginClick(View view){
        Intent intent = new Intent(this,IndexActivity.class);
        //第一種方法是傳輸基本類型資料
        intent.putExtra("name","www.javayihao.top");
        //第二種方法是傳輸一個bundle,bundle類似一個map,可以防止key-value類型資料
        Bundle bundle = new Bundle();
        bundle.putString("name","www.javayihao.top");
        intent.putExtra("bundle",bundle);
        //第三種方法傳輸一個序列化,這裡User是implements Serializable之後才能傳遞
        intent.putExtra("name",new User());
        startActivity(intent);
    }
}      

第二個activity

public class IndexActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        if(getIntent()!=null) {
            //第一種接收方法
            String name=  getIntent().getStringExtra("title");
            //第二種接收方法
            String name1 = getIntent().getBundleExtra("bundle").getString("name");
        }
    }
}      

如何讓第一個activity接收第二個activity關閉之後傳遞的資料

Intent intent = new Intent(this,IndexActivity.class);
startActivityForResult(intent,100);      
public void loginClick(View view){
    Intent intent = new Intent();
    intent.putExtra("name","www.javayihao.top");
    setResult(RESULT_OK,intent);
  //  setResult(RESULT_OK);
    finish();
}      
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if(requestCode==100&&resultCode==RESULT_OK){
        //其他業務
    }
}