如何在Android中创建全局对象拥有的视图?

如何在Android中创建全局对象拥有的视图?,android,android-activity,webview,Android,Android Activity,Webview,我有一个活动类拥有的webview。我通过findViewId()访问webview。这很有效。现在我想让webview在全球范围内保持。所以我扩展了应用程序类。但是我如何从那里访问webView呢。因为应用程序类不允许findViewId()方法。WebView是在activity_layout.xml中定义的,因此我认为这适用于任何视图,而不仅仅是WebView,它是这样定义的 <WebView android:id="@+id/webview" android:l

我有一个活动类拥有的webview。我通过findViewId()访问webview。这很有效。现在我想让webview在全球范围内保持。所以我扩展了应用程序类。但是我如何从那里访问webView呢。因为应用程序类不允许findViewId()方法。WebView是在activity_layout.xml中定义的,因此我认为这适用于任何视图,而不仅仅是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不会刷新


谢谢。

为什么不使用继承

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

class BaseActivity Extends Activity{

  protected WebView webview;

  // and so on and so forth
}
这样做的原因是,即使活动被销毁,我也需要webview保持不变

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


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

如何缓存资源?浏览器不是自动做到这一点吗?您正在谈论使用这个:setCacheMode()在OnDestroy()上它不会被破坏吗?它会被包含在它的活动中。