android 如何关闭另一个应用程序activity

android 如何关闭另一个应用程序activity,第1张

首先一点

android的app绝大都的肯定是全屏的。接着问题就来了。你说A调用了B。那么界面肯定处于B的状态。要想A关闭B的话。肯定得返回A,然后再去关闭B,但是根据Activity

的生命周期的,如果没有重写返回键的响应的方法话,你按返回键应该B就被会被关闭才对。。以上是根据你先给的意思我发表的疑惑。

觉得我说的不对。你可以吧问题说的再详细点,

1后面添加了一个菜单返回功能键,这个方法也只能用systemexit(0)来关闭当前活动的Activity,附代码:

public boolean onCreateOptionsMenu(Menu menu)

{

superonCreateOptionsMenu(menu);

MenuItem item = menuadd(MenuNONE, MenuNONE, MenuNONE, "Exit");

itemsetOnMenuItemClickListener(new MenuItemOnMenuItemClickListener()

{

public boolean onMenuItemClick(MenuItem item)

{

Systemexit(0);

return true;

}

});

return true;

}

2这样太不方便,每次退出界面之后应用程序还在运行,

网上提供了几种方法,将下面SysApplication这个类复制到工程里面,然后在每个Acitivity的oncreate方法里面通过SysApplicationgetInstance()addActivity(this); 添加当前Acitivity到ancivitylist里面去,最后在想退出的时候调用SysApplicationgetInstance()exit();可直接关闭所有的Acitivity并退出应用程序。

附代码:

import javautilLinkedList;

import javautilList;

import androidappActivity;

import androidappAlertDialog;

import androidappApplication;

import androidcontentDialogInterface;

import androidcontentIntent;

public class SysApplication extends Application {

private List mList = new LinkedList();

private static SysApplication instance;

private SysApplication() {

}

public synchronized static SysApplication getInstance() {

if (null == instance) {

instance = new SysApplication();

}

return instance;

}

// add Activity

public void addActivity(Activity activity) {

mListadd(activity);

}

public void exit() {

try {

for (Activity activity : mList) {

if (activity != null)

activityfinish();

}

} catch (Exception e) {

eprintStackTrace();

} finally {

Systemexit(0);

}

}

public void onLowMemory() {

superonLowMemory();

Systemgc();

}

}

3在应用程序里面 的activity的oncreate里面添加SysApplicationgetInstance()addActivity(this)

如:

public void onCreate(Bundle savedInstanceState)

{

superonCreate(savedInstanceState);

setContentView(Rlayoutmain);

SysApplicationgetInstance()addActivity(this);

}

Android下结束进程的方法

一、结束一个活动Activity

要主动的结束一个活动Activity,使用finish方法,而且这个方法最后会调用Activity的生命周期函数onDestroy方法,结束当前的Activity,从任务栈中d出当前的Activity,激活下一个Activity。当然其他的finish系列方法,我们不在这里做详细讨论,有兴趣的同学可以自己查阅一下SDK 的文档。

二、强制结束当前的进程

强行结束当前进程有两个方法。

1、killProcess(int pid)              例子:androidosProcesskillProcess(androidosProcessmyPid());

这个方法使用是有条件的:

a、将被杀掉的进程 和 当前进程 处于同一个包或者应用程序中;

b、将被杀掉的进程 是由当前应用程序所创建的附加进程;

c、将被杀掉的进程 和 当前进程 共享了普通用户的UID。(这里的普通用户,是相对于Root权限的用户来说的)

2、Systemexit(int code)             例子:Systemexit(0);

该方法只能用于结束当前进程自身,在程序遇到异常,无法正常执行时,可以通过这个方法强制退出。

需要注意的是,这两个方法,会导致进程非正常退出,就是说,进程退出时不会去执行onPause、onStop和onDestroy方法,那么进程很有可能错过了保存数据的机会。因此,这两个方法最好使用在出现异常的时候!

三、结束另一个进程

要通过一个进程去结束另一个进程。在之前的SDK版本中,一直使用方法restartPackage(packageName)方法,但是在Android的开发文档中介绍说,这个函数会导致一些问题( the previous behavior here is no longer available to applications because it allows them to break other applications by removing their alarms, stopping their services, etc),所以建议大家使用一个新的方法: 

void killBackgroundProcesses(String packageName)

由于这个方法没有返回值,所以我们也不知道我们的目标进程是否真的退出了。但是,我目前只发现了这个可以结束另一个进程的方法。

四、退出到主屏幕

这个方法,也是退出当前进程的一个方法。如果我们在进程中创建了很多的Activity,但是又不想关闭时去退出不在任务栈顶的Activity,那么就可以直接使用这个方法了。  

  下面看看代码实现:

package cnandroiddevelopflushapkutil;

import javaioIOException;

import javaioOutputStream;

/

  执行android命令

  

  @author Yuedong Li

  

 /

public class SuUtil {

private static Process process;

/

  结束进程,执行 *** 作调用即可

 /

public static void kill(String packageName) {

initProcess();

killProcess(packageName);

close();

}

/

  初始化进程

 /

private static void initProcess() {

if (process == null)

try {

process = RuntimegetRuntime()exec("su");

} catch (IOException e) {

eprintStackTrace();

}

}

/

  结束进程

 /

private static void killProcess(String packageName) {

OutputStream out = processgetOutputStream();

String cmd = "am force-stop " + packageName + " \n";

try {

outwrite(cmdgetBytes());

outflush();

} catch (IOException e) {

eprintStackTrace();

}

}

/

  关闭输出流

 /

private static void close() {

if (process != null)

try {

processgetOutputStream()close();

process = null;

} catch (IOException e) {

eprintStackTrace();

}

}

}

有时跳转的activity较多时,还需要多次按返回键,这样感觉一点都不爽。后面添加了一个菜单返回功能键,这个方法也只能用systemexit(0)来关闭当前活动的Activity,附代码:public boolean onCreateOptionsMenu(Menu menu){superonCreateOptionsMenu(menu);MenuItem item = menuadd(MenuNONE, MenuNONE, MenuNONE, "Exit");itemsetOnMenuItemClickListener(new MenuItemOnMenuItemClickListener(){public boolean onMenuItemClick(MenuItem item){Systemexit(0);return true;}});return true;}想到这样太不方便了,每次退出界面之后应用程序还在运行,今天查了下资料终于把这个问题给解决了,网上提供了几种方法,我吸收了下面这个自认为简单易懂的方法,将下面SysApplication这个类复制到工程里面,然后在每个Acitivity的oncreate方法里面通过SysApplicationgetInstance()addActivity(this);添加当前Acitivity到ancivitylist里面去,最后在想退出的时候调用SysApplicationgetInstance()exit();可直接关闭所有的Acitivity并退出应用程序。附代码:import javautilLinkedList; import javautilList; import androidappActivity; import androidappAlertDialog; import androidappApplication; import androidcontentDialogInterface; import androidcontentIntent; public class SysApplication extends Application { private List mList = new LinkedList(); private static SysApplication instance; private SysApplication() { } public synchronized static SysApplication getInstance() { if (null == instance) { instance = new SysApplication(); } return instance; } // add Activity public void addActivity(Activity activity) { mListadd(activity); } public void exit() { try { for (Activity activity : mList) { if (activity != null) activityfinish(); } } catch (Exception e) { eprintStackTrace(); } finally { Systemexit(0); } } public void onLowMemory() { superonLowMemory(); Systemgc(); } } 在应用程序里面 的activity的oncreate里面添加SysApplicationgetInstance()addActivity(this)如:public void onCreate(Bundle savedInstanceState){superonCreate(savedInstanceState);

以上就是关于android 如何关闭另一个应用程序activity全部的内容,包括:android 如何关闭另一个应用程序activity、Android 怎么退出整个应用程序、android 如何关闭另一个package中的activity等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/10133289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-05
下一篇 2023-05-05

发表评论

登录后才能评论

评论列表(0条)

保存