AppManagerパッケージ

2543 ワード

ロール#ロール#


Android SDKには独自のActivityスタックマネージャがありますが、呼び出すことはできません.すべては自分で1つのスタックで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 = 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(),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)
        }
    }
}