展会信息港展会大全

Android应用开发完全退出程序的通用方法
来源:互联网   发布日期:2016-01-19 10:54:16   浏览:1155次  

导读:在开发一个android应用时,有可能有N个Activity,而在每个Activity里的菜单里有个退出程序菜单,这里就要完全退出程 序了,所以今天给大家分享的是Android应用开发完全退出程序的通用方法,以前我在网上收了几种......

在开发一个android应用时,有可能有N个Activity,而在每个Activity里的菜单里有个"退出程序"菜单,这里就要完全退出程 序了,所以今天给大家分享的是Android应用开发完全退出程序的通用方法,以前我在网上收了几种方法,但都不能通用,比如:任务管理器方法(ActivityManager):

首先要说明该方法运行在Android 1.5 - 2.1 才可以(不过蛮好用的撒!),2.2以后就不行了,同时需要加如下权限:

1

<uses-permission android:name="android.permission.RESTART_PACKAGES" />

用法只有如下两行代码:

1

ActivityManager am = (ActivityManager)getSystemService (Context.ACTIVITY_SERVICE);

2

am.restartPackage("packagename");

上面要是2.2以后能通用就非常完美了,可是结果你懂得。。。

所以为了通用想到了另外一种方法,就是当我们点击 退出程序 菜单时,可以从当前Activity跳转到主Activity(就是我们打开程序最先 启动的那个Activity),通过Intent告诉主Activity我要退出程序,然后主Activity调用finish()方法即可。由于这一过 程很短暂,以致于我们没观察到Activity有任何切换就退出程序了!

同样为了让大家更容易理解,我做了一个Demo.为了省事,程序运行时我直接就从MainActivity跳转到BActivity,在BActivity有个 退出程序 菜单,点击会退出程序。具体过程如下:

首先第一步:新建一个Android工程,命名为ExitDemo(目录结构图如下)

第二步:定义一个工具类Sysutil用来退出程序,这样定义好处可以在多个Activity的时候复用,代码如下:

01

package com.tutor.exit;

02

import android.app.ActivityManager;

03

import android.content.Context;

04

import android.content.Intent;

05

public class SysUtil {

06

public static final intEXIT_APPLICATION = 0x0001;

07

08

private Context mContext;

09

10

public SysUtil(Context context){

11

this.mContext = context;

12

}

13

14

//完全退出应用

15

public void exit(){

16

17

//1.5 - 2.1之前下面两行是ok的,2.2之后就不行了,所以不通用

18

//ActivityManager am = (ActivityManager)mContext.getSystemService(Context.ACTIVITY_SERVICE);

19

//am.restartPackage("com.tutor.exit");

20

21

Intent mIntent = new Intent();

22

mIntent.setClass(mContext, MainActivity.class);

23

//这里设置flag还是比较 重要的

24

mIntent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);

25

//发出退出程序指示

26

mIntent.putExtra("flag", EXIT_APPLICATION);

27

mContext.startActivity(mIntent);

28

}

29

}

第三步:修改MainActivity.java,代码如下:

01

package com.tutor.exit;

02

import android.app.Activity;

03

import android.content.Intent;

04

import android.os.Bundle;

05

public class MainActivity extends Activity {

06

@Override

07

public void onCreate(Bundle savedInstanceState) {

08

super.onCreate(savedInstanceState);

09

setContentView(R.layout.main);

10

}

11

12

//这里用来接受退出程序的指令

13

@Override

14

protected void onStart() {

15

int flag = getIntent().getIntExtra("flag", 0);

16

if(flag == SysUtil.EXIT_APPLICATION){

17

finish();

18

}

19

super.onResume();

20

21

}

22

//程序启动后就进入了BActivity

23

@Override

24

protected void onResume() {

25

Intent mIntent = new Intent();

26

mIntent.setClass(this, BActivity.class);

27

startActivity(mIntent);

28

super.onStart();

29

}

30

31

32

//当activity是单例的时候,再次启动该activity就不会再调用 oncreate->onstart这些方法了

33

@Override

34

protected void onNewIntent(Intent intent) {

35

int flag = getIntent().getIntExtra("flag", 0);

36

if(flag == SysUtil.EXIT_APPLICATION){

37

finish();

38

}

39

super.onNewIntent(intent);

40

}

41

}

第四步:新建一个Activity命名为BAcivity.java,记得要在配置文件里申明哦~代码如下:

01

package com.tutor.exit;

02

import android.app.Activity;

03

import android.os.Bundle;

04

import android.view.Menu;

05

import android.view.MenuItem;

06

import android.widget.TextView;

07

public class BActivity extends Activity {

08

public static final int MENU_EXITAPPLICATION = Menu.FIRST;

09

10

@Override

11

protected void onCreate(Bundle savedInstanceState) {

12

super.onCreate(savedInstanceState);

13

14

TextView mTextView = new TextView(this);

15

mTextView.setText("Welcome to Frankie's blog.");

16

setContentView(mTextView);

17

}

18

19

@Override

20

public boolean onCreateOptionsMenu(Menu menu) {

21

menu.add(0, MENU_EXITAPPLICATION, 0,"退出程序");

22

return super.onCreateOptionsMenu(menu);

23

}

24

25

26

@Override

27

public boolean onOptionsItemSelected(MenuItem item) {

28

if(item.getItemId() == MENU_EXITAPPLICATION){

29

//其他Activity退出程序这样调用就ok了

30

SysUtil mSysUtil= new SysUtil(BActivity.this);

31

mSysUtil.exit();

32

}

33

return super.onOptionsItemSelected(item);

34

}

35

}

第五步:运行程序,直接进入了BActivity,点击菜单效果如下:

点击退出程序菜单,管你SDK是什么版本,就可以完全退出程序啦,有木有!有木有!呵呵~

这里要说明一下,如果我们的主Activity是单例模式的话,也就是launcheMode="singleTop|singleTask"如下面代码:

1

<activity android:name=".MainActivity"

2

android:launchMode="singleTop"

3

android:label="@string/app_name">

4

<intent-filter>

5

<action android:name="android.intent.action.MAIN" />

6

<category android:name="android.intent.category.LAUNCHER" />

7

</intent-filter>

8

</activity>

这时MainActivity执行了onNewIntent()方法,退出程序 在这里完成

赞助本站

人工智能实验室

相关热词: Android应用开发

AiLab云推荐
展开

热门栏目HotCates

Copyright © 2010-2024 AiLab Team. 人工智能实验室 版权所有    关于我们 | 联系我们 | 广告服务 | 公司动态 | 免责声明 | 隐私条款 | 工作机会 | 展会港