Andorid开发之进程后台被kill后恢复与webView.loadUrl拼接参数注意事项

最近在做项目开发的时候,遇到两个比较难解的bug,最终发现是因为在写代码的时候情况考虑不全,特此记录:

1,Android应用在后台,如果系统内存不走,则应用进程会被kill掉,在这种情况下重新打开应用,由于不是用户手动kill或者退出,系统会为用户恢复状态,但是这时候只会调用MainActivity的onCreate方法,如果有些操作是在Launch页中处理的话,这种情况就不能将所有的处理逻辑执行完毕,可能导致出现很难复现的bug。


2,在使用Android的webView组件过程中,为了实现在浏览器的内部跳转会重载shouldOverrideUrlLoading()方法,然后通过loadUrl加载具体页面,但是如果本地在目标的url上有拼接参数的操作,需要避免对参数的重复的拼接,否则可能会出现类似重定向导致webView返回失效的bug。

具体的情形是:

1加载 http://www.baidu.com,这时在本地拼接一个参数,例如token;

2偶现的会调用shouldOverrideUrlLoading()方法,这时候如果还会在后面追加一个token的参数,这时的地址已经和目标的地址不同,所以在webView的回退记录里面会有两条记录;

3调用webView的goBack()方法,则会重复2的步骤,这样就会出现类似于重定向的bug,导致webview返回不了。

该问题的解决方法1,在本地拼接参数时添加判断,如果参数已经存在则在执行追加参数的操作,这样可以避免webview中出现多余的回退记录;2一些参数可以通过js的与页面通信,避免将参数追加到参数的后面,这样可以改变访问的url,从而避免出现上述问题。

是的,可以使用WebView中JavaScript与Android中Java方法互调。 想要实现这个功能,需要使用到Android中的WebView的addJavascriptInterface方法。这个方法可以将Java对象暴露给JavaScript代码,JavaScript代码就可以调用这个对象的方法,实现Java与JavaScript的互通。 具体步骤如下: 1. 在Java代码中创建一个类,这个类中包含需要暴露给JavaScript的方法。 2. 使用WebView的addJavascriptInterface方法将这个Java类对象暴露给JavaScript。 3. 在JavaScript代码中,使用window对象来访问这个Java对象,即可调用其中的方法。 具体的实现可以参考下面的代码示例: Java代码: ```java public class WebAppInterface { Context mContext; /** Instantiate the interface and set the context */ WebAppInterface(Context c) { mContext = c; } /** Show a toast from the web page */ @JavascriptInterface public void showToast(String toast) { Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show(); } } ``` 在Activity中使用addJavascriptInterface方法将Java对象暴露给JavaScript: ```java WebView webView = (WebView) findViewById(R.id.webview); webView.addJavascriptInterface(new WebAppInterface(this), "Android"); ``` JavaScript代码中通过window对象访问Java对象: ```javascript function showToast() { Android.showToast("Hello World!"); } ``` 注意,addJavascriptInterface方法需要在主线程中调用,否则可能出现安全问题。另外,在使用JavaScript调用Java方法时,需要添加@JavascriptInterface注解,以确保安全性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值