(Android四大組件)---Activity

Android中的Activity是一個應用組件, 相當於iOS中的UIViewController ,  用戶可與其提供的屏幕進行交互, 進行拍照,以及撥打電話, 發送電子郵件 或者查看點圖等操作. 每個Activity都會獲得一個用戶繪製其用戶界面的窗口. 窗口通常會充滿整個屏幕 , 但也可小於屏幕並浮動在其他窗口之上.

  創建Activity需要注意在清單文件 mainifests中聲明Activity.


一.

1. setContentView(); 函數是指定一個視圖用來呈現內容. 綁定Java文件的.
2. mainifests -> AndroidMainifest.xml 是安卓程序的配置文件
3. java目錄裏放的是整個程序的源代碼
4. res目錄是所有的資源文件所存在的目錄 例如 樣式 視圖xml
5. 綁定事件調用函數 findViewById(R.id.btnIdentifier).setOnClickListener(new View.OnClickListener() {
//Override
public void Onclick(View v) {
//響應事件
}
});
6. 跳轉另一個Activity的方法是 startActivity(new Intent(MainActivity.this , AnOtherActivity.class ));
7. 跳轉網頁的方法 startActivity(new Intent(Intent.ACTION_VIEW , Uri.parse("http://www.baidu.com") ));

二. Activity的生命週期
onCreate(); //表示Activity正在被創建 , 生命週期內只調用一次 , 相當於iOS中的viewDidLoad(). 安卓中一般用來進行綁定控件,設置對應的響應事件
onStart(); //Activity變爲在屏幕上對用戶可見時調用
onResume(); //開始與用戶交互時調用, 可見
onPause(); //Activity正在停止. 可見 ,失去焦點
onStop(); //Activity即將停止,且處於不可見狀態
onDestory(); //Activity正在被銷燬 , 在整個Activity生命週期內只調用一次
onRestart(); //Activity正在重新啓動

當在一個Activity上啓動另外一個Activity的時候:
第一個Activity onPause() --> 第二個Activity onCreate() --> onStart() --> onResume() --> 第一個Activity onStop()

當在第二個Activity返回第一個Activity的時候:
第二個Activity onPause() --> 第一個Activity onRestart() --> onStart() --> onResume() --> 第二個Activity onStop() --> onDestory()


三. 在Activity之間傳遞參數
1.基本數據類型
//傳入
findViewById(R.id.btnStart).setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
Intent i =newIntent(MainActivity.this,TheAty.class);
i.putExtra("data","Hello jikexueyuan!");
startActivity(i);
}
});
//調用
Intent i = getIntent();
tv= (TextView) findViewById(R.id.tv);
tv.setText(i.getStringExtra("data"));

2.傳遞數據包
//傳入
findViewById(R.id.btnStart).setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
Intent i =newIntent(MainActivity.this,TheAty.class);
Bundle b =newBundle();
b.putString("name","極客學院");
b.putInt("age",2);
// b.putBundle("bundleName",bundle);
i.putExtras(b);
startActivity(i);
}
});
//調用
Bundle data = i.getExtras();
tv= (TextView) findViewById(R.id.tv);
tv.setText(String.format("name=%s, age = %d, name1 = %s",data.getString("name"),data.getInt("age"),data.getString("name1","leo")));

3.傳遞值對象
//自定義對象 Serializable Java方式序列化
public classUserimplementsSerializable{

privateStringname;
private intage;

public intgetAge() {
returnage;
}

publicString getName() {
returnname;
}

public voidsetAge(intage) {
this.age= age;
}

public voidsetName(String name) {
this.name= name;
}

publicUser(String name,intage){
this.name= name;
this.age= age;
}
}

//

//傳入
findViewById(R.id.btnStart).setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
Intent i =newIntent(MainActivity.this,TheAty.class);
i.putExtra("user",newUser("呵呵噠",12));
startActivity(i);
}
});

//調用
Intent i =getIntent();
User user = (User) i.getSerializableExtra("user");
tv= (TextView) findViewById(R.id.tv);
tv.setText(String.format("name=%s, age=%d",user.getName(),user.getAge()));

//反向傳值
// A界面
findViewById(R.id.btnStart).setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
Intent i =newIntent(MainActivity.this,TheAty.class);
startActivityForResult(i,0);
}
});

@Override //類似於代理方法
protected voidonActivityResult(intrequestCode,intresultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
textView.setText(data.getStringExtra("data"));
}

// B界面
editText= (EditText) findViewById(R.id.editText);
button= (Button) findViewById(R.id.sendBackBtn);
button.setOnClickListener(newView.OnClickListener() {
@Override
public voidonClick(View v) {
Intent i =newIntent();
i.putExtra("data",editText.getText().toString());
setResult(1,i);
finish();
}
});

Android 中 Activity 啓動模式

標準啓動模式 standard
standard是系統默認的啓動模式,每次激活Activity時都會創建Activity,並且放入任務棧中
<?xml version="1.0"encoding="utf-8"?>
<manifestxmlns:android="http://schemas.android.com/apk/res/android"
package="com.sahara.launchmode">

<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activityandroid:name=".MainActivity"
android:launchMode="standard"> //此處是設置啓動模式的
<intent-filter>
<actionandroid:name="android.intent.action.MAIN"/>

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

</manifest>

SingleTop 模式
如果在任務的棧頂正好存在改Activity的實例,就重用該實例,而不會創建新的Activity對象,不過它會調用onNewIntent() 方法.
如果棧頂部不存在就會創建新的實例並放入棧頂(即使棧中已經存在該Activity實例,只要不在棧頂,都會創建新的實例). 會回調onNewIntent()方法
android:launchMode="singleTop"> //此處是設置啓動模式的

SignleTask模式
如果在棧中已經有該Activity的實例,就重用該實例(會調用onNewIntent()方法)
重用時,會讓該實例回到棧頂,因此在它上面的實例將會被移除棧.
如果棧中不存在該實例,將會創建新的實例放入棧中.

SingleInstance 模式是一個獨立的任務棧並且只放了一個實例Activity

顯式Intent的使用
startActivity(newIntent(MainActivity.this,MyAty.class));

註冊Activity
<activityandroid:name=".MyAty">
<intent-filter>
<categoryandroid:name="android.intent.category.DEFAULT"/>默認DEFAULT一般就是Activity
<actionandroid:name="com.jikexueyuan.learnitent.action.MyAty"/>
</intent-filter>
</activity>

定義常量
public static finalStringACTION = "com.jikexueyuan.learnitent.action.MyAty";

隱式Intent的使用 通過隱式可以跨應用啓動其他程序的Activity
隱式startActivity(newIntent(MyAty.ACTION));

禁止Activity跨模塊(工程)導出
<activityandroid:name=".MyAty"android:exported="false"/>

通過瀏覽器鏈接啓動本地Activity
瀏覽器端核心代碼<ahref="app://hello">Launch My App</a>

安卓端核心代碼配置 manifests/AndroidManifest.xml文件
<activityandroid:name=".LocalAppAty"android:label="LocalAppAty">
<intent-filter>
<categoryandroid:name="android.intent.category.BROWSABLE"/>
指定該Activity能被瀏覽器安全調用
<categoryandroid:name="android.intent.category.DEFAULT"/>
<actionandroid:name="android.intent.action.VIEW"/>
<dataandroid:scheme="app"/>
</intent-filter>
</activity>
//獲取並且打印Web端傳來的完整字符串
Uri uri = getIntent().getData();
System.out.println(uri);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章