Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/heroku/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 启动相同活动并销毁前一个活动的最佳方法_Android_Android Activity_Webview - Fatal编程技术网

Android 启动相同活动并销毁前一个活动的最佳方法

Android 启动相同活动并销毁前一个活动的最佳方法,android,android-activity,webview,Android,Android Activity,Webview,我正在制作一些webview活动,这些活动将从主活动加载。有没有一种方法可以运行,比如说每1h运行一次某种方法可以在后台启动webview活动#2,杀死#1 webview活动并尽可能无缝地从#2切换到#1,可能会出现一秒钟或几秒钟的白屏,因为webview中存在一些内存泄漏,我需要偶尔销毁一下活动,但想让一切尽可能顺利过渡吗 提前谢谢你 这段代码可能适合您。当我的用户更改应用程序的语言时,我使用它重新启动应用程序 Intent intent = new Intent(getActivity()

我正在制作一些webview活动,这些活动将从主活动加载。有没有一种方法可以运行,比如说每1h运行一次某种方法可以在后台启动webview活动#2,杀死#1 webview活动并尽可能无缝地从#2切换到#1,可能会出现一秒钟或几秒钟的白屏,因为webview中存在一些内存泄漏,我需要偶尔销毁一下活动,但想让一切尽可能顺利过渡吗


提前谢谢你

这段代码可能适合您。当我的用户更改应用程序的语言时,我使用它重新启动应用程序

Intent intent = new Intent(getActivity(), StartUpActivity.class);
PendingIntent pendingIntent = PendingIntent.getActivity(
                                    getActivity(),
                                    123456,             //request code ??? some dummy numbers.
                                    intent,
                                    PendingIntent.FLAG_CANCEL_CURRENT);
AlarmManager manager = (AlarmManager) getActivity().getSystemService(Context.ALARM_SERVICE);
manager.set(AlarmManager.RTC, System.currentTimeMillis() + 100, pendingIntent);
System.exit(0);
您可以在此处阅读PendIgnitent类:


我不完全确定请求代码是什么。我使用了一些虚拟数字,它是有效的。

如果你一定要这样做,我建议将你的活动包装在“父”活动中,每次你需要杀死“子”(即当前)活动时,只需转换到父级(使用Intent.FLAG\u activity\u CLEAR\u TOP标志)然后让父对象生成活动的新实例。这样你就不必做任何古怪的事情,这与android活动的工作方式是一致的。

你为什么要做这样的事情呢?每当你谈论一些背景工作,这些工作会在某个特定的时间间隔后醒来,因为我需要偶尔销毁活动,因为如果活动没有销毁,android webView会泄漏内存……每次我启动另一个活动时,内存使用量都会激增,我怎么才能清除呢?这是android的一个有趣功能,需要时间来适应。基本上,如果您先启动活动A,然后从A启动活动B,从B启动活动C(A->B->C),您很可能在内存中拥有所有活动。这样做的原因是为了让您的导航返回正常工作(意味着Android能够导航到上一个活动)。为了解决这个问题,如果你从A->B->A开始,你可以用一个标志(intent.addFlag(flag_ACTIVITY_CLEAR_TOP);)来创建你的B->A意向,这个标志告诉你android活动B现在可以被杀死和释放。如果你不这样做,你的内存中将有A,B和另一个A(A1,B,A2,其中A1是A的一个实例,A2是另一个实例)。但是,如果您只是通过指定该标志来导航“后退”,您的B活动将被清除(因为实际上,A1->B->A1意味着B可以被终止,A1可以被重用)。如果不清楚,请告诉我。请把这个和盐放在一起。这是不科学的,我只是在数小时的调试后将自己的观察结果记录到内存评测中。从B->A开始的另一种方法是在B上调用finish(),它会自动将您带回到A(它还会在B上调用onDestroy(),这样您可以自己清理)。CLEAR_TOP版本更稳定,在finish()不起作用的某些用例中几乎是必需的,因为它也适用于A->B->C->D的情况,现在你必须回到A,有效地杀死B、C和D。