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

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

如果应用程序的“活动”发生更改,则会发生“崩溃”。

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

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");

}

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

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

有没有可能作为字符串传递给的html代码是大的?我还尝试将html代码作为字符串添加到HashMap中,但问题是相同的。ReadDataActivity

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

在模拟器中,一切正常。


答案 1

根据我的经验(前段时间),您可以在IPC中打包多达1MB的数据。如果在给定时间发生大量事务,则可以降低此限制。更多信息请点击这里Bundle

为了解决此问题,我建议您将内容保存在临时文件上,并将临时文件的路径/URI传递给第二个活动。然后在第二个活动中,从文件中读出内容,执行所需的操作,最后删除该文件。

如果需要,您还可以为此任务合并Shared_Preferences - 如果您认为处理文件很麻烦。


答案 2

我对使用 Intent 传输的最大数据量进行了一些研究。而且似乎限制远不及1MB或90KB,它更像是500KB(在API 10,16,19和23上测试)。

我写了一篇关于这个主题的博客文章,你可以在这里找到它:http://web.archive.org/web/20200217153215/http://neotechsoftware.com/blog/android-intent-size-limit


推荐