对活动的操作

获取当前的活动和基类活动类

创建一个java基类 叫BaseActivity 让它继承

android.support.v7.app.AppCompatActivity

然后在这个基类中重写onCreate方法

然后在里面添加日志

Log.d(“当前活动”,getClass().getSimpleName());

这样 不管我们进入到那个活动 都可以知道当前是那个

package com.foxdevelop.www.lifedemo;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("当前活动",getClass().getSimpleName());
    }
}Code language: JavaScript (javascript)
05-13 08:36:47.473 18499-18499/? D/当前活动: MainActivity
05-13 08:36:56.460 18499-18499/com.foxdevelop.www.lifedemo D/当前活动: NormalActivity
05-13 08:37:03.839 18499-18499/com.foxdevelop.www.lifedemo D/当前活动: Activity3
05-13 08:38:11.104 18499-18499/com.foxdevelop.www.lifedemo D/当前活动: NormalActivity

一键退出程序

如果我们当前在第三个活动,我们需要退出程序 需要按三次back,很不方便

按home并不是退出程序,而是挂起程序。

那么如果我们想一键退出程序怎么做。

我们可以写一个专门的集合类对所有的活动进行管理就可以。

添加一个活动管理器专门处理这个问题

这个是一个集合类 里面有一个list 用来存放所有的活动。提供一个add和remove方法 来增加和删除list中的单个活动

然后我们在基类activity中 在oncreate方法中 调用add 在distroy中调用remove

这样 我们可以保证 list里面存放的 都是在栈中的活动

因为我们list保存的是 每个活动的引用 所以操作他们的finish等同于操作每个活动。

然后给集合类添加一个finishall方法

这个方法 我们使用foreach循环 然后分别调用他们的finsh方法

下面我们来试一下

我们在第三个活动中 给按钮注册时间 然后调用这个集合类。

把finishall封装成静态方法。

为了保证能完全退出 我们可以调用系统的killProcess方法 杀掉当前程序的进程。

android.os.Process.KillProcess(android.os.Process.myPid());

活动管理器类

package com.foxdevelop.www.lifedemo;

import android.app.Activity;

import java.security.PublicKey;
import java.util.ArrayList;
import java.util.List;

public class ActivityHelper {
    public  static List<Activity> activities = new ArrayList<Activity>();

    public static void add (Activity a)
    {
        activities.add(a);
    }

    public static void remove (Activity a)
    {
        activities.remove(a);
    }

    public  static void finishAll()
    {
        for (Activity a:activities)
        {
            a.finish();
        }
    }
}Code language: JavaScript (javascript)

在基类活动中增加和删除活动

活动在创建的时候增加 oncreate

在销毁的时候 删除 ondxxx

package com.foxdevelop.www.lifedemo;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;

public class BaseActivity extends AppCompatActivity {
    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.d("当前活动",getClass().getSimpleName());
        ActivityHelper.add(this);
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        ActivityHelper.remove(this);
    }
}Code language: JavaScript (javascript)

在活动3中 添加一个按钮 调用finishall方法

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="第三个活动" />

    <Button
        android:id="@+id/button"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:text="退出应用" />

</LinearLayout>Code language: HTML, XML (xml)
public class Activity3 extends BaseActivity {
    private static final String TAG = "第三个活动";
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_3);
        Log.e(TAG, "" + getTaskId());

        Button b = (Button)findViewById(R.id.button);
        b.setOnClickListener(
                new View.OnClickListener(){
                    @Override
                    public void onClick(View view){
                        ActivityHelper.finishAll();
                    }
                }
        );
    }
}Code language: PHP (php)

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注