如何在Android中创建由全局对象拥有的View?

时间:2014-09-30 03:56:54

标签: android android-activity webview

我有一个由Activity类拥有的webview。我通过findViewId()访问webview。这很好用。现在我想让webview在全球范围内持续存在。所以我扩展了Application类。我怎么能从那里访问webView。因为Application类不允许使用findViewId()方法。 WebView在activity_layout.xml中定义,所以我认为任何View都是如此,而不仅仅是以这种方式定义的webview。

<WebView  
    android:id="@+id/webview"
    android:layout_width="fill_parent"
    android:layout_height="0dp"
    android:layout_weight="1"
    android:gravity="top"   />  

这样做的原因是,即使活动被销毁,我也需要webview持久化,以便在活动的OnDestroy之后webview不会刷新。

谢谢。

2 个答案:

答案 0 :(得分:2)

  

这样做的原因是我需要webview在活动被销毁时仍然存在

这是一个坏主意。即使您在销毁父Activity后能够保留对WebView的引用,它也将无效,因为它引用的WebView对象将与Activity一起销毁。这是为什么全局数据在像Java这样的面向对象语言中不受欢迎的一个很好的例子。

一种可能的解决方案是将网页及其所有资源(图像等)缓存到本地文件系统。然后,当您的Activity重新启动时,您可以检查是否有缓存并直接从磁盘加载它(如果存在)。这将使您的响应时间显着增加。

答案 1 :(得分:0)

为什么不使用继承?

您可以使用WebView作为属性创建基本活动。

class BaseActivity Extends Activity{

  protected WebView webview;

  // and so on and so forth
}