1.啟動(dòng)一個(gè)activity并從它中拿到回執(zhí)的值
通過startActivityForResult啟動(dòng)activity绞蹦,從onActivityResult拿到返回值
代碼示例
public class FirstActivity extends AppCompatActivity {
private static final int REQUESTCODE = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
findViewById(R.id.startIntent).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(FirstActivity.this, SecondActivity.class);
startActivityForResult(intent, REQUESTCODE);
}
});
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
switch (requestCode) {
case REQUESTCODE:
if (resultCode == RESULT_OK) {
String returnData = data.getStringExtra("RETURN_DATA");
Toast.makeText(this, "return data: " + returnData, Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
}
通過setResult向上一個(gè)活動(dòng)返回?cái)?shù)據(jù)
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
findViewById(R.id.text).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent();
intent.putExtra("RETURN_DATA", "返回?cái)?shù)據(jù)給第一頁(yè)");
setResult(RESULT_OK, intent);
finish();
}
});
}
}
2.活動(dòng)被回收了的處理
代碼示例
public class FirstActivity extends AppCompatActivity {
private String tempData = "";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_first);
tempData = "內(nèi)存回收之前需要保存的測(cè)試數(shù)據(jù)";
if (savedInstanceState != null) {
tempData = savedInstanceState.getString("tempdata");
}
}
@Override
protected void onSaveInstanceState(Bundle outState) {
super.onSaveInstanceState(outState);
outState.putString("tempdata", tempData);
}
}
3.啟動(dòng)模式
在清單文件中添加 android:launchMode
- standard
- singleTop
- singleTask
- singleInstance
standard
系統(tǒng)不在乎是否已經(jīng)在返回椗缰冢總存在泉蝌,每次啟動(dòng)都會(huì)重新創(chuàng)建一個(gè)實(shí)例
singleTop
啟動(dòng)活動(dòng)時(shí)屋剑,如果返回棧頂已經(jīng)是該活動(dòng)呛谜,則不在重新創(chuàng)建新的活動(dòng)风罩。如果不在棧頂岁忘,則仍然會(huì)再次創(chuàng)建該活動(dòng)。
singleTask
系統(tǒng)會(huì)在返回棧中檢查是否存在該活動(dòng)深员,如果存在负蠕,則直接使用它,并把這個(gè)活動(dòng)之上的其他活動(dòng)統(tǒng)統(tǒng)出棧倦畅。如不存在遮糖,則重新創(chuàng)建。
singleInstance
啟用一個(gè)新的返回棧來管理這個(gè)活動(dòng)叠赐。如果有上個(gè)活動(dòng)A(standard)->B(singleInstance)->C(standard)依次點(diǎn)擊跳轉(zhuǎn)完欲账,點(diǎn)擊back鍵回退時(shí),回退順序?yàn)镃->A->B芭概。因?yàn)锳C為同一個(gè)棧赛不,C出棧后自然會(huì)顯示A,A出棧后才會(huì)顯示另一個(gè)棧B谈山。
4.BaseActivity俄删,ActivityCollector管理啟動(dòng)的activity
代碼示例
public class ActivityCollector {
private static List<Activity> activities = new ArrayList<>();
public static void addActivity(Activity activity) {
activities.add(activity);
}
public static void removeActivity(Activity activity) {
activities.remove(activity);
}
/**
* 退出程序
*/
public static void finishAll() {
for (Activity activity : activities) {
if (!activity.isFinishing()) {
activity.finish();
}
}
}
/**
* 保證程序完全退出,殺掉進(jìn)程,只能用于殺掉當(dāng)前程序進(jìn)程
*/
public static void killProcess (){
android.os.Process.killProcess( android.os.Process.myPid());
}
}
public class BaseActivity extends AppCompatActivity {
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
//打印當(dāng)前活動(dòng)的名稱
Log.d("BaseActivity", "Current Activity Name: " + getClass().getSimpleName());
ActivityCollector.addActivity(this);
}
@Override
protected void onDestroy() {
super.onDestroy();
ActivityCollector.removeActivity(this);
}
}
5.啟動(dòng)activity較優(yōu)方式
代碼示例
public class SecondActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);
}
public static void startSecondActivity(Context context, String param1, String param2) {
Intent intent = new Intent(context, SecondActivity.class);
intent.putExtra("param1", param1);
intent.putExtra("param2", param2);
context.startActivity(intent);
}
}