android如何关闭子窗口,android开发之关闭所有的activity的方法

当app中打开了多个activity的时候,由于进入的比较深,所以,很多app不得不让用户一步一步退回到第一个界面(MainActivity),在一步一步退回的时候,逐个释放。

今天写kotlin来实现,在任意位置,直接退出应用的方法。

首先,每当打开一个 activity 的时候,需要有一个地方做记录,以便让一个循环遍历代码释放所有使用过的 activity 资源。

那么,建立一个数组。这里使用 MutableList,因为它有 add 和 remove 方法,很好用。

var activities:MutableList = arrayListOf()

这个数组就是用来记录当前打开了多少个 activity 的。

那么每次打开一个新的 activity 就需要执行一个添加到这个数组的动作。

fun ActivityAdd(activity:Activity){

activities.add(activity)

}

然后来写最核心的操作,释放所有的 activity 。

首先是遍历数组,遍历到的 activity 判断是否已经为 null 了,不为 null 证明当前还没有释放掉,那么把这个 activity finish 掉。再从数组中 remove 掉。

fun ActivityFinishAll(){

for (activity:Activity in activities){

if (activity != null){

activity.finish()

activities.remove(activity)

}

}

}

这还没有完,要在每个 activity onCreate 的时候,执行数组的添加动作

ActivityAdd(this)

就写在 override fun onCreate(savedInstanceState: Bundle?) 方法内。

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

ActivityAdd(this)

...

}

当然,这样还不足够,还需要对单独的 activity 实现移除功能。

fun ActivityRemove(activity: Activity){

activities.remove(activity)

}

这样就具备基本功能了。

PS:其他activity方法关闭方法

四种结束当前的activity方法

//关闭当前activity方法一

finish();

//关闭当前界面方法二

android.os.Process.killProcess(android.os.Process.myPid());

//关闭当前界面方法三

System.exit(0);

//关闭当前界面方法四

this.onDestroy();

但如果已经启动了四个Activity:A,B,C和D,

在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据依然保留

Intent intent = new Intent();

intent.setClass(TableActivity.this, FrameActivity.class);

intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);//设置不要刷新将要跳到的界面

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity

startActivity(intent);

如果已经启动了四个Activity:A,B,C和D,

在D Activity里,想再启动一个Activity B,但不变成A,B,C,D,B,而是希望是A,B,而且B上的数据不保留

Intent intent = new Intent();

intent.setClass(TableActivity.this, FrameActivity.class);

intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);//它可以关掉所要到的界面中间的activity

startActivity(intent);

如果已经启动了四个Activity:A,B,C和D,在D Activity里,想再启动一个 Activity B,但不变成A,B,C,D,B,而是希望是A,C,D,B,则可以像下面写代码:

Intent intent1 = new Intent(TableActivity.this, FrameActivity.class);

intent1.addFlags(Intent.FLAG_ACTIVITY_REORDER_TO_FRONT);

startActivity(intent1);

如果已经启动了四个Activity:A,B,C和D,在D Activity里,想要一次性关闭所有的activity

创建一个专门用来处理activity的类

package com.layout;

import java.util.LinkedList;

import java.util.List;

import android.app.Activity;

import android.app.Application;

/**

* 一个类 用来结束所有后台activity

* @author Administrator

*

*/

public class SysApplication extends Application {

//运用list来保存们每一个activity是关键

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) {

mList.add(activity);

}

//关闭每一个list内的activity

public void exit() {

try {

for (Activity activity:mList) {

if (activity != null)

activity.finish();

}

} catch (Exception e) {

e.printStackTrace();

} finally {

System.exit(0);

}

}

//杀进程

public void onLowMemory() {

super.onLowMemory();

System.gc();

}

}

在每个activity被创建时加上

SysApplication.getInstance().addActivity(this);

将该activity添加到list中去。

当你想关闭时,调用SysApplication的exit方法

//关闭整个程序

SysApplication.getInstance().exit()

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
以下是在Android WebView中点击链接后在新窗口中打开,并将页面标题显示在标题栏的完整代码: MainActivity.java: ``` import android.os.Bundle; import android.webkit.WebView; import android.webkit.WebViewClient; public class MainActivity extends AppCompatActivity { private WebView webView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); webView = findViewById(R.id.webView); webView.setWebViewClient(new MyWebViewClient()); webView.getSettings().setJavaScriptEnabled(true); webView.loadUrl("https://www.example.com"); } private class MyWebViewClient extends WebViewClient { @Override public boolean shouldOverrideUrlLoading(WebView view, String url) { view.loadUrl(url); return true; } @Override public void onPageFinished(WebView view, String url) { super.onPageFinished(view, url); setTitle(view.getTitle()); } } } ``` activity_main.xml: ``` <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <WebView android:id="@+id/webView" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout> ``` 在这个示例中,我们使用一个`WebView`来显示网页,并设置`WebViewClient`以在WebView中打开所有链接。`shouldOverrideUrlLoading()`方法用于拦截所有网页加载请求,并在WebView中加载它们。`onPageFinished()`方法用于在页面加载完成后设置标题栏的标题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值