(点击
上方公众号
,可快速关注)
来源:soul_code
链接:
blog.csdn.net/soul_code/article/details/50425803
如有好文章投稿,请点击 → 这里了解详情
我们先来看看几种常见的退出方法(不优雅的方式)
一、容器式
建立一个全局容器,把所有的Activity存储起来,退出时循环遍历finish所有Activity
import
java.util.ArrayList;
import
java.util.List;
import
android.app.Activity;
import
android.os.Bundle;
public
class
BaseActivity
extends
Activity
{
@Override
protected
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
// 添加Activity到堆栈
AtyContainer.getInstance().addActivity(
this
);
}
@Override
protected
void
onDestroy()
{
super
.onDestroy();
// 结束Activity&从栈中移除该Activity
AtyContainer.getInstance().removeActivity(
this
);
}
}
class
AtyContainer
{
private
AtyContainer()
{
}
private
static
AtyContainer instance
=
new
AtyContainer();
private
static
List
activityStack
=
new
ArrayList
();
public
static
AtyContainer getInstance()
{
return
instance;
}
public
void
addActivity(Activity aty)
{
activityStack.add(aty);
}
public
void
removeActivity(Activity aty)
{
activityStack.remove(aty);
}
/**
* 结束所有Activity
*/
public
void
finishAllActivity()
{
for
(
int
i
=
0
,
size
=
activityStack.size();
i
size;
i++)
{
if
(
null
!=
activityStack.get(i))
{
activityStack.get(i).finish();
}
}
activityStack.clear();
}
}
这种方法比较简单, 但是可以看到activityStack持有这Activity的强引用,也就是说当某个Activity异常退出时,activityStack没有即使释放掉引用,就会导致内存问题,接下来我们看一种类似的方式,但是会稍微优雅一点点
二、广播式
通过在BaseActivity中注册一个广播,当退出时发送一个广播,finish退出
public
class
BaseActivity
extends
Activity
{
private
static
final
String
EXITACTION
=
"action.exit"
;
private
ExitReceiver exitReceiver
=
new
ExitReceiver();
@Override
protected
void
onCreate(Bundle savedInstanceState)
{
super
.onCreate(savedInstanceState);
IntentFilter filter