Activity的LaunchMode和退出应用程序

来源:互联网 发布:漂亮的av女演员知乎 编辑:程序博客网 时间:2024/04/29 13:00
1.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>





原创粉丝点击