我尝试在我的应用程序中添加WebView
活动,以便在打开帮助HTML文件时,它们可以保证由浏览器打开。
只要活动开始,它就可以工作。但功能最多是脆弱的,通常WebViewActivity
类onCreate()
函数永远不会被调用,就好像startActivity
发送的意图得到lost in cyberspace
一样。有时候它有效。我看不到任何用logcat来表示它为什么会如此间歇地工作。
另外,我有一部手机可以在90%的时间内工作,而另一部手机可以在10%的时间工作。
有没有人经历过这个?
编辑:
开始活动的代码:
public final void launchInternalHTMLFile(String filePath)
{
try {
Intent intent = new Intent(Main.this, WebViewActivity.class);
intent.putExtra("TheURL", filePath);
Log.d("Tag", "launchInternalHTMLFile " + filePath);
startActivity(intent, null);
Log.d("Tag", "launchInternalHTMLFile startActivity called");
} catch (Exception ex) {
Log.e("Tag", "launchInternalHTMLFile exception: " + ex);
}
}
WebViewActivity代码:
public class WebViewActivity extends Activity {
private WebView mWebView;
@Override
public void onCreate(Bundle savedInstanceState) {
Log.d("Tag", "WebViewActivity.onCreate");
super.onCreate(savedInstanceState);
getWindow().requestFeature(Window.FEATURE_NO_TITLE);
mWebView = new WebView(this);
mWebView.getSettings().setJavaScriptEnabled(true);
mWebView.setWebViewClient(new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return false;
}
});
this.setContentView(mWebView);
mWebView.postDelayed(new Runnable() {
@Override
public void run() {
mWebView.loadUrl(getIntent().getStringExtra("TheURL"));
}
}, 100);
}
@Override
public boolean onKeyDown(final int keyCode, final KeyEvent event) {
if ((keyCode == KeyEvent.KEYCODE_BACK) && mWebView.canGoBack()) {
mWebView.goBack();
return true;
}
return super.onKeyDown(keyCode, event);
}
}
使用logcat,我可以看到ActivityManager接收到intent,但是当问题发生时,我在日志中得到NO条目" WebViewActivity.onCreate" ...
喔。忘记清单:
<activity android:name=".WebViewActivity" android:label="@string/app_name" android:screenOrientation="portrait">
</activity>
编辑:大部分时间工作的手机是Android 4.4.2,而大多数时间不工作的手机是4.4.4。怪异。
编辑:问题已追溯到GLSurfaceView.onPause,它永远不会返回,有效地挂起了应用程序。虽然这只发生在startActivity上,否则暂停/恢复应该按照它应该...... :(
答案 0 :(得分:0)
您是否在活动的主要主题中调用了launchInternalHTMLFile(String filePath)
?
答案 1 :(得分:0)
我通过将嵌入式活动的开始延迟50毫秒来解决这个问题(使用android.os.Handler.postDelayed)。
现在至少,GLSurfaceView.onPause没有锁定,但仍然......应该有更好的方法来解决这个问题。