Androidアプリの完全終了

35823 ワード

私のブログ
Androidでは、すべてのActivityを脱退しても.しかし、アプリケーションは終了せず、システムはしばらく維持されています.
詳細については「
TaskとActivityに関するいくつかの属性
』では、
Android:alwaysRetainTaskStateなどの紹介.
しかし、私たちは
ルートActivityのonDestroy()
メソッドでは、アプリケーションを完全に終了させる、すなわちプロセスが終了するようにいくつかの操作を行います.
私が今テストして有効な方法は
System.exit(0)
および
android.os.Process.killProcess(android.os.Process.myPid())
この2つの方法.ネット上ではこの2つの方法が無効だと反応している人がいますが、彼らはいないかもしれません.
ルートActivity
のonDestroy()
彼らを使う.
上記の2つの方法がルート以外のActivityで使用されている場合、確かに無効です.
.
もしあなたがまだどんなものか分からないなら
Acitivity
と呼ぶ
ルートActivity
の場合は、「
ActivityとTaskの基本モデル
』と『
TaskとActivityに関するいくつかの属性

サンプル・プログラム1:
protected void onDestroy() {
super.onDestroy();
System.exit(0);
//またはandroid.os.Process.killProcess(android.os.Process.myPid()); 
Log.d(tag,"onDestroy");
}
サンプルプログラム2
(自分のアプリケーションで)

    private final static HandlerThread business0HandlerThread = new HandlerThread ( "Business0Handler" );
    private static Handler business0Handler ;
    public static Handler getBusiness0Handler () {
        if ( business0Handler == null ) {
        synchronized ( business0HandlerThread ){
    if ( business0Handler == null ) {
business0HandlerThread . start ();
business0Handler = new Handler ( business0HandlerThread . getLooper ());
}
        }
        }
        return business0Handler ;
    }
/*
*
*/
public boolean isAnyWorkGoing () {
return false ;
}
ActivityManager am ;
public boolean shouldKill () {
if ( isAnyWorkGoing ()) {
return true ;
} else {
if ( am == null ) {
for ( int i = 0 ; i < 5 ; i ++) {
am = ( ActivityManager ) getSystemService ( Context . ACTIVITY_SERVICE );
if ( am != null )
break ;
try {
Thread . sleep ( 50 );
} catch ( InterruptedException e ) {
e . printStackTrace ();
}
}
}
List < RunningTaskInfo > runningTasks = am . getRunningTasks ( 100 );
for ( RunningTaskInfo task : runningTasks ) {
ComponentName baseActivity = task . baseActivity ;
if ( baseActivity != null
&& task . baseActivity . getClassName (). startsWith (
"cn.edu.edut.robin" )) {
if ( task . numRunning > 0 ) {
Log . d ( TAG , task . baseActivity . getClassName ()
+ task . numRunning );
flgKillLoop = false ;
return true ;
}
}
}
}
return false ;
}
boolean flgKillLoop = false ;
public void signKill () {
flgKillLoop = true ;
getBusiness0Handler (). post ( killRunable );
}
Runnable killRunable = new Runnable () {
@Override
public void run () {
if ( shouldKill ()) {
android . os . Process . killProcess ( android . os . Process . myPid ());
} else if ( flgKillLoop ) {
getBusiness0Handler (). postDelayed ( killRunable , 60 * 1000 );
}
}
};

の最後の部分