Activity的LaunchMode和退出应用程序

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>






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值