Androidアプリの完全終了
私のブログ
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
(自分のアプリケーションで)
の最後の部分
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
);
}
}
};
の最後の部分