1.Activity的启动模式
<1>Standard(默认-标准模式)
自己可以启动自己(会创新一个新的Activity)
<2>SingleTop(顶单例模式)
在栈顶只允许有一个相同的Activity
自己不能启动自己
<3>SingleTask(内单例模式)
如果要启动的Activity存在,则干掉要启动的Activity上面的所有的Activity
<1>Standard(默认-标准模式)
自己可以启动自己(会创新一个新的Activity)
<2>SingleTop(顶单例模式)
在栈顶只允许有一个相同的Activity
自己不能启动自己
<3>SingleTask(内单例模式)
如果要启动的Activity存在,则干掉要启动的Activity上面的所有的Activity
<4>SingleInstance(全局单例模式)
2.退出应用程序
<1>递归退出
<2>栈退出
Application:多个组件之间数据共享(全局)
因为页面太多就不放效果图了
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.zking.administrator.app6.MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#66ffff00"
android:text="这是MainActivity"
android:textSize="30sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_main_text"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="跳自己"
android:onClick="jumpMain"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="跳B"
android:onClick="jumpB"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="退出应用程序"
android:onClick="exit"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context="com.zking.administrator.app6.BActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#66ff00ff"
android:text="这是BActivity"
android:textSize="30sp"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/tv_b_text"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="跳MMain"
android:onClick="jumpMain"/>
<Button
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="退出应用程序"
android:onClick="exit"/>
</LinearLayout>
package com.zking.administrator.app6;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.TextView;
import com.zking.application.MyApplication;
public class MainActivity extends AppCompatActivity {
private TextView tv_main_text;
private MyApplication myApplication;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv_main_text = (TextView) findViewById(R.id.tv_main_text);
//this打印当前地址 this.getTaskId()拿当前Activity所占任务的ID
//如果你第一个或第二个ID不一样的话就代表有俩个栈,一样的话就代表一个栈
tv_main_text.setText("当前Activity实例(在内存里的地址):"+this+"\n当前任务栈"+this.getTaskId());
//获取MyApplication
myApplication = (MyApplication) getApplication();
myApplication.add(this);
}
public void jumpMain(View view){
//自己跳自己
Intent intent=new Intent(this,MainActivity.class);
//启动(栈用普通的方式启动)
startActivity(intent);
//递归的退出方式用startActivityForResult启动
//startActivityForResult(intent,0x101);
}
public void jumpB(View view){
//跳B页面
Intent intent=new Intent(this,BActivity.class);
startActivity(intent);
}
//递归的退出方式
public void exit(View view){
//finish();//退出当前的Activity
//finish会调用onDestroy
//System.exit(0);//退出当前Activity
//system不会用onDestroy
//用myApplication退出
myApplication.exit();
}
// @Override
// protected void onActivityResult(int requestCode, int resultCode, Intent data) {
// super.onActivityResult(requestCode, resultCode, data);
// exit(null);
// }
@Override
protected void onDestroy() {
super.onDestroy();
Log.i("text","onDestroy");
}
}
package com.zking.administrator.app6;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.TextView;
import com.zking.application.MyApplication;
public class BActivity extends AppCompatActivity {
private MyApplication myApplication;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_b);
TextView tv_b_text= (TextView) findViewById(R.id.tv_b_text);
tv_b_text.setText("当前Activity地址:"+this+"\nTastId:"+this.getTaskId());
//获取MyApplication
myApplication = (MyApplication) getApplication();
myApplication.add(this);
}
public void jumpMain(View view){
//跳Main页面
Intent intent=new Intent(this,MainActivity.class);
startActivity(intent);
}
//退出
public void exit(View view){
//finish();//退出当前的Activity
//System.exit(0);//退出当前Activity
//用myApplication退出
myApplication.exit();
}
}
用栈退出要写一个自定义的MyApplication
package com.zking.application;
import android.app.Activity;
import android.app.Application;
import java.util.ArrayList;
import java.util.List;
/**
* Created by Administrator on 2017/6/17.
*/
public class MyApplication extends Application{
//定义一个对象集合
private List<Activity> activities=new ArrayList<>();
//写一个方法给集合加值
public void add(Activity activity){
activities.add(activity);
}
//写一个退出的方法
public void exit(){
//遍历activities
for (Activity activity : activities) {
//调用每一个activity的finish
activity.finish();
}
}
}
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.zking.administrator.app6">
//在这里给application换一个名字,就是我们自定义的MyApplication
<application
android:name="com.zking.application.MyApplication"
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">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<activity android:name=".BActivity"></activity>
</application>
</manifest>