【问题标题】:How can i create a View owned by a global object in Android?如何在 Android 中创建由全局对象拥有的视图?
【发布时间】:2014-09-30 03:56:54
【问题描述】:

我有一个属于 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 持续存在,这样 webview 在 Activity 的 OnDestroy 之后不会刷新。

谢谢。

【问题讨论】:

    标签: android android-activity webview


    【解决方案1】:

    这样做的原因是,即使活动被破坏,我也需要 webview 持续存在

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

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

    【讨论】:

    • 如何缓存资源?浏览器不会自动执行吗?你只是在谈论使用这个:setCacheMode()
    【解决方案2】:

    为什么不使用继承?

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

    class BaseActivity Extends Activity{
    
      protected WebView webview;
    
      // and so on and so forth
    }
    

    【讨论】:

    • 这不会在 OnDestroy() 时被销毁吗?
    • 它将与它的活动一起包含。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-15
    相关资源
    最近更新 更多