java - Intent putExtra 方法的最大长度? (强制关闭)

标签 java android android-intent android-activity

我需要一些帮助来调试我的应用程序。首先:在模拟器和其他一些设备上,我的应用程序运行良好。在我的设备上,我强制关闭(没有强制关闭消息)。

如果应用的 Activity 发生变化,就会发生“崩溃”。

这是 MainActivity 类的一些代码。它只是通过 webview 从网页中读取 html 内容。不,不可能通过 HttpRequest 执行此操作,因为我无法模拟发布请求。

public class MainActivity extends Activity {

    public final static String EXTRA_HTML = "com.example.com.test.HTML";

    private WebView mWebView;
    private ProgressDialog mDialog;

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);  
        mWebView = (WebView) findViewById(R.id.webView1);
        CookieSyncManager.createInstance(this);
        CookieManager cookieManager = CookieManager.getInstance();
        cookieManager.removeAllCookie();
        mWebView.setBackgroundColor(0);
        mWebView.setWebChromeClient(new WebChromeClient() {
            public boolean onConsoleMessage(ConsoleMessage cmsg) {
                if (cmsg.message().startsWith("MAGIC")) {
                    mDialog.cancel();
                    /*HashMap<String, String> message = new HashMap<String, String>();*/
                    String msg = cmsg.message().substring(5);
                    Intent intent = new Intent(MainActivity.this,
                        ReadDataActivity.class);
                    /*message.put("message", msg);*/
                    /*intent.putExtra(EXTRA_HTML, message);*/
                                    intent.putExtra(EXTRA_HTML, msg);
                    startActivity(intent);
                }
                return false;
            }
        });
        mWebView.getSettings().setJavaScriptEnabled(true);
        mWebView.getSettings().setPluginState(PluginState.OFF);
        mWebView.getSettings().setLoadsImagesAutomatically(false);
        mWebView.getSettings().setBlockNetworkImage(true);
        mWebView.getSettings().setAppCacheEnabled(true);
        mWebView.getSettings().setSavePassword(true);
        mWebView.getSettings()
                .setCacheMode(WebSettings.LOAD_NORMAL);
        mWebView.setWebViewClient(new WebViewClient() {

            public void onPageFinished(WebView view, String address) {
                if (address.indexOf("mySession") != -1) {
                    view.loadUrl("javascript:console.log('MAGIC'+document.getElementsByTagName('html')[0].innerHTML);");
                }
});

                mWebView.loadUrl("http://www.myurl.de");

}

因此,在 onConsoleMessage() 方法中,我只是将 html 代码传递给另一个读取、解析和显示内容的 Activity 类。

现在的问题是,此时应该加载 ReadDataActivity 类,应用程序只是关闭并返回主屏幕,没有任何消息或用户对话框。

作为字符串传递给 ReadDataActivity 的 html 代码是否可能很大?我也尝试将 html 代码作为字符串添加到 HashMap 中,但问题是一样的。

一些想法我可以做些什么来调试问题?也许我应该尝试创建一个 Parcelable 对象?

在模拟器中一切正常。

最佳答案

根据我的经验(不久前),您可以在 IPC 的 Bundle 中打包多达 1MB 的数据。如果在给定时间发生大量事务,则可以减少此限制。更多信息 here .

为了解决这个问题,我建议您将内容保存在临时文件中,并将临时文件的 path/URI 传递给您的第二个 Activity 。然后在您的第二个 Activity 中,从文件中读取内容,执行您想要的操作,最后删除该文件。

如果您愿意,您也可以为此任务合并 Shared_Preferences - 如果您认为处理文件很麻烦。

关于java - Intent putExtra 方法的最大长度? (强制关闭),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12496700/

相关文章:

java - 从函数内启用 Android 应用程序按钮

android - 如何覆盖 Android ListView 快速滚动条外观

android - 按下BACK后如何用软键盘关闭Activity?

android - 使用 LocalBroadcastManager 进行 'sticky' 广播

java - 如果输入标签未关闭,WebDriver 不会返回内部文本

java.lang.IllegalStateException : missing behavior definition for the preceding method call getLast(. ..)

java - 在不使用 <cq :text> 的情况下从自定义组件访问文本

android - 由于列不存在而强制关闭游标

android - 始终重新创建具有 launchMode singleTop 或 singleTask 的 Activity

android - 如何只旋转图像,而不是 Imageview