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