美文网首页
AppManager封装

AppManager封装

作者: WangGavin | 来源:发表于2018-02-06 23:05 被阅读113次

    角色

    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)
            }
        }
    }
    
    

    相关文章

      网友评论

          本文标题:AppManager封装

          本文链接:https://www.haomeiwen.com/subject/szvnzxtx.html