我有一个WebView
我正在加载一个活动,以便让它预先加载,以便它立即弹出另一个Activity
(从第一个启动)。
问题在于,为了实例化WebView
,我必须传入Context
,在这种情况下,它是上面提到的第一个。
所以效果很好,第二个Activity
显示WebView
就好了。问题是,如果我单击<select>
中的WebView
下拉列表,其选择器对话框将显示在WebView下。感觉就像选择根本不起作用,直到您点击后退按钮并在返回父活动之前简要地看到选择对话框。
似乎当我在第二个活动中将WebView
附加到布局时,它的模态附加到该活动的窗口,但WebView
本身附加到父活动的窗口,所以它显示在层次结构的更高点。
如何在Context
实例化之后更改WebView
?{/ p>
这是一个非常难以解决的问题 - 我必须在活动开始之前创建WebViews,但我还需要选择对话框才能工作。
如果有人能在这里给我一些见解,我会非常感激。
这是针对SDK项目的,因此我无权访问父活动。此外,saveState不起作用,因为WebView
中显示的大部分内容都是由JavaScript生成的,并且完整的DOM堆栈不会传输。
答案 0 :(得分:12)
您可以尝试使用MutableContextWrapper:
创建WebViewMutableContextWrapper mMutableContext=new MutableContextWrapper(context);
WebView mWebView=new WebView(mMutableContext);
以后你可以做
mMutableContext.setBaseContext(newcontext);
但是......
WebView是一个非常复杂的组件,可能会使用传递的上下文来创建其他对象,如Handlers。 WebView可能会使用这些处理程序将内容发布到原始UI线程,所以最后你可能会有一个带有上下文混合的View,你知道,双内存泄漏(如果它能够正常工作)
Webview跨越至少1个帖子&#34; webcore&#34;这是动作发生的地方,也是与原始UI线程与...处理程序的持续通信?通过原始背景?谁知道!
甚至有2种不同的webview引擎:Kitkat是基于铬的,而果冻豆和以前的版本使用AOSP / WebView。所以你有一个额外的突破点。
你说的理由不够强大。 WebView并不那么慢。如果您加载的应用是,请尝试优化它。你可以做很多事情,比如加载HTML&amp;来自内部资产的图形。
答案 1 :(得分:0)
在我的应用程序(它的浏览器)中,我有同样的问题。当用户返回App时,我不喜欢每次都加载WebView。我已经部分解决了这个问题。我在import hashlib
import threading
#bn=block number d=input data, ph=previous hash
bn = 1
d = "mydata"
ph = "0000000000000000000000000000000000000000000000000000000000000000"
class MyThread(threading.Thread):
def __init__(self, threadID, begin, end):
threading.Thread.__init__(self)
self.threadID = threadID
self.end = end
self.begin = begin
def run(self):
for val in range(self.begin, self.end):
mine(self.threadID, val)
print("done " + str(self.threadID))
#hashing function
def mine(id, x):
hash = hashlib.sha256((str(bn) + str(x) + str(d) + str(ph)).encode('utf-8')).hexdigest()
if hash.find("0000000", 0, 7) > -1:
# print(id)
print(x)
print(hash)
#now break it up and distribute it to the threads
#Possible SHA256 Combinations 8388608000000
pc = 8388608000000
#Number of desired Threads (more threads help more?)
nt = 704
#calculating the steps
step = round((pc)/(nt))
#starting the threads with each thread calculating a different range of nonces.
for x in range (1, nt):
thread = MyThread((x), (x-1)*(step), (x)*(step))
thread.start()
上覆盖了onBackPressed()
,并使用HomeActivity
代替了moveTaskToBack(true)
。因此,当用户在super.onBackPressed()
上重新使用系统时,它不会破坏HomeActivity
和所有视图。它只是最小化应用程序。外观上是相同的行为,但是如果用户尝试通过启动图标运行App,则所有视图都已加载。我知道这是一个临时解决方案,所有视图都可以随时被系统销毁,但是效果很好。并为我涵盖了很多情况。