目錄
一: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則會在任務棧中銷毀該執行個體。
singleTop:如果某個Activity自己激活自己,即任務棧棧頂就是該Activity,則不需要建立,其餘情況都要建立Activity執行個體;
singleTask:如果要激活的那個Activity在任務棧中存在該執行個體,則不需要建立,隻需要把此Activity放入棧頂,并把該Activity以上的Activity執行個體都pop;
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().
七: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){
//其他業務
}
}