2014-10-16 63 views
-2

我正在制作一些webview活动,它将从主活动中加载。有没有一种方法可以运行,比方说每1小时一些可以在后台启动webview activity#2的方法,杀死#1 webview activitiy并从#2到#1尽可能无缝地切换,也许一些白屏或者某种东西,因为webview中有一些内存泄漏,我需要在一段时间后摧毁activitiy,但是想尽可能平滑地过渡一切?开始同样活动并销毁前一个活动的最佳方式

预先感谢您!

+0

你为什么要这样做? – forcewill 2014-10-16 11:30:31

+1

每当你谈到某些后台工作将在某个特定时间间隔后唤醒时,请转到[Service](http://developer.android.com/guide/components/services.html) – nobalG 2014-10-16 11:30:40

+0

因为我需要在一段时间,因为如果活动没有被破坏,android webView正在泄漏内存...... – Tomek 2014-10-16 11:52:05

回答

0

大概这个code'll适合你。我用它来重新启动我的应用程序,当我的用户更改应用程序的语言。

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

您可以阅读有关PendignIntent类在这里:http://developer.android.com/reference/android/app/PendingIntent.html

我不是完全地肯定,request code是什么。我正在使用一些虚拟数字,它的工作原理。

0

如果你绝对必须这样做,我会建议将你的活动包装在“父母”活动中,并且每当你需要杀死“孩子”(即当前)活动时,只需转换到父母(使用意图。 FLAG_ACTIVITY_CLEAR_TOP标志),然后让父项产生一个新的活动实例。这样你就不必做任何时髦的事情,并且它与android活动的工作方式一致。

+0

每次我开始另一个活动时,内存使用情况跳转,我怎么能清除它? – Tomek 2014-10-16 12:54:06

+0

这是Android需要时间去适应的有趣功能之一。基本上,如果您启动活动A,然后从B启动B(A-> B-> C),则很可能会在内存中执行所有活动。这是为了让你的导航回来正确工作(这意味着Android能够导航到以前的活动)。为了解决这个问题,如果你从A-> B-> A,你可以用一个标志(intent.addFlag(FLAG_ACTIVITY_CLEAR_TOP);)创建你的B-> A intent,它告诉android Activity B现在可以被杀死和释放。 – kha 2014-10-16 14:30:04

+0

如果你不这样做,你现在将在内存中有A,B和另一个A(A1,B,A2,其中A1是A的一个实例,A2是另一个实例)。如果您只是通过指定该标志来导航“返回”,那么您的B活动将被清除(因为有效地,A1-> B-> A1意味着B可以被杀死并且A1被重用)。如果不清楚,请告诉我。请带上一粒盐。这不是科学的,我只是在经过几个小时和几个小时的调试后才放下自己的观察内存分析。 – kha 2014-10-16 14:33:01

相关问题