AppManager封装

简介: 角色Android SDK里有自己的Activity栈管理器,但是我们无法调用,所有只能自己用一个堆栈来管理Activity。这个类的主要任务是进行应用的Activity入栈,出栈,获取当前Activity,finish掉在当前栈的所有Activity,退出应用实现import android.

角色

Android SDK里有自己的Activity栈管理器,但是我们无法调用,所有只能自己用一个堆栈来管理Activity。这个类的主要任务是进行应用的Activity入栈,出栈,获取当前Activity,finish掉在当前栈的所有Activity,退出应用

实现


import android.annotation.SuppressLint
import android.app.Activity
import android.app.ActivityManager
import android.content.Context
import java.util.*

/**
 * Created by Newterk on 2018/2/6.
 */
class AppManager private constructor(){
//  activity管理栈
    private val activityStack: Stack<Activity> = Stack()

    companion object {
        val instance : AppManager by lazy { AppManager() }
    }

    /**
     * 入栈
     */
    fun addActivity(activity: Activity){
        activityStack.add(activity)
    }

    /**
     * 出栈
     */
    fun finishActivity(activity: Activity){
        activity.finish()
        activityStack.remove(activity)
    }

    /**
     * 当前activity,也就是栈的最后一位元素
     */
    fun currentActivity(): Activity{
        return activityStack.lastElement()
    }

    /**
     * 清理栈
     */
    fun finishAllActivity(){
        for(activity in activityStack){
            activity.finish()
        }
        activityStack.clear()
    }

    /**
     * 退出应用
     */
    @SuppressLint("MissingPermission")
    fun exitApplication(context: Context){
        finishAllActivity()
        val activityManager:ActivityManager = context.getSystemService(Context.ACTIVITY_SERVICE) as ActivityManager
        activityManager.killBackgroundProcesses(context.packageName)
        System.exit(0)
    }
}

使用

入栈,出栈操作是每个Activity都要调用的,所有最好的办法是放在自己封装的Activity基类上。

open class BaseActivity :RxAppCompatActivity(){

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        AppManager.instance.addActivity(this)
    }

    override fun onDestroy() {
        super.onDestroy()
        AppManager.instance.finishActivity(this)
    }
}

应用在双击退出的一个场景


class RegisterActivity : BaseMvpActivity<RegisterPresenter>(),RegisterView {
 private var timeTemp: Long = 0

  ....

    /**
     * 双击back键退出应用
     */
    override fun onBackPressed() {
        val currentTime = System.currentTimeMillis()
        if ((currentTime-timeTemp)>2000){
            toast("再点击一次退出应用")
            timeTemp = currentTime
        }else{
            AppManager.instance.exitApplication(application)
        }
    }
}

目录
相关文章
|
10月前
|
JavaScript API
接口的封装
接口的封装
|
存储 Cloud Native 安全
C++ 封装成库
C++ 封装成库
|
Java 数据挖掘 数据库
封装的理解
封装的理解
117 0
|
6月前
|
数据安全/隐私保护 C语言 C++
C++(七)封装
本文档详细介绍了C++封装的概念及其应用。封装通过权限控制对外提供接口并隐藏内部数据,增强代码的安全性和可维护性。文档首先解释了`class`中的权限修饰符(`public`、`private`、`protected`)的作用,并通过示例展示了如何使用封装实现栈结构。接着介绍了构造器和析构器的使用方法,包括初始化列表的引入以及它们在内存管理和对象生命周期中的重要性。最后,通过分文件编程的方式展示了如何将类定义和实现分离,提高代码的模块化和复用性。
|
9月前
什么是封装?为什么是要封装?
什么是封装?为什么是要封装?
175 0
|
10月前
|
安全 C#
C#封装详解
C#封装详解
112 0
|
10月前
|
安全 数据安全/隐私保护
什么是封装?
什么是封装?
86 0
|
程序员
封装(了解一下)
封装(了解一下)
109 0