首先,我们将管理Activity的功能通过一个扩展的Application类来实现。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
|
public
class
MyApplication
extends
Application {
private
static
Stack<Activity> activityStack;
private
static
MyApplication singleton;
@Override
public
void
onCreate()
{
super
.onCreate();
singleton=
this
;
}
// Returns the application instance
public
static
MyApplication getInstance() {
return
singleton;
}
/**
* add Activity 添加Activity到栈
*/
public
void
addActivity(Activity activity){
if
(activityStack ==
null
){
activityStack =
new
Stack<Activity>();
}
activityStack.add(activity);
}
/**
* get current Activity 获取当前Activity(栈中最后一个压入的)
*/
public
Activity currentActivity() {
Activity activity = activityStack.lastElement();
return
activity;
}
/**
* 结束当前Activity(栈中最后一个压入的)
*/
public
void
finishActivity() {
Activity activity = activityStack.lastElement();
finishActivity(activity);
}
/**
* 结束指定的Activity
*/
public
void
finishActivity(Activity activity) {
if
(activity !=
null
) {
activityStack.remove(activity);
activity.finish();
activity =
null
;
}
}
/**
* 结束指定类名的Activity
*/
public
void
finishActivity(Class<?> cls) {
for
(Activity activity : activityStack) {
if
(activity.getClass().equals(cls)) {
finishActivity(activity);
}
}
}
/**
* 结束所有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();
}
/**
* 退出应用程序
*/
public
void
AppExit() {
try
{
finishAllActivity();
}
catch
(Exception e) {
}
}
}
|
注意,为了在我们自己的应用程序中使用这个自定义的Application类,而不是默认的Application类。需要在Manifest文件中修改一下<Application>的属性( android:name)
例如:
1<application2android:icon="@drawable/icon"3 android:label="@string/app_name"4 android:name="your_package_name_here.MyApplication">
使用方法:
方法1: 之后我们在所有的activity的oncreate方法中通过getinstance得到一个MyApplication的实例,然后调用addActivity方法把当前的activity加入到stack中,如果要退出应用程序只需要调用AppExit方法即可。
方法2: 自定义一个继承Activity类的BaseActivity
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
|
public
class
BaseActivity
extends
Activity{
@Override
protected
void
onCreate(Bundle savedInstanceState){
super
.onCreate(savedInstanceState);
//添加Activity到堆栈
MyApplication.getInstance().addActivity(
this
);
}
@Override
protected
void
onDestroy(){
super
.onDestroy();
//结束Activity&从栈中移除该Activity
MyApplication.getInstance().finishActivity(
this
);
}
}
|
后续的Activity 都集成这个BaseActivity就可以了。
Android的官方文档中写到”没有必要自定义Application类”
There is normally no need to subclass Application.
但事实上,通过逆向工程国际大厂的Android应用,我发现各厂都自定义了Application类用以实现Global变量操作和Activity管理。所以我们也学习一下吧~(你也有兴趣通过逆向工程来借鉴一下别人的Android应用?别急,后续的教程里会陆续介绍的。)
以上的代码只是基本的Activity管理方案,以此为框架,我们可以加入更多关于Acitivity的管理方法以及其他全局变量的操作。
欢迎访问 http://www.mobiletuts.me 一个及时更新的Android开发教程网站