为什么自制软件时一添加wkwebview ios8 闪退就闪退,没任何错误提示

异常描述:
pointer being freed was not allocated
*** set a breakpoint in malloc_error_break to debug
问题描述:
将UIWebView 转成WKWebview后,在UMeng的错误里偶尔会出现几次报错,排查后,定位到WKWebview相关;
但问题只会出现在iOS10.0以下的系统。
在模拟器上使用8.1的系统调试确实会有这种异常,
使用malloc_error_break定位,也只能定位到内存释放时出栈异常,没办法继续调试。
通过排除法,发现只要不监听wkwebview.scrollview的delegate,就不会异常;
想起scrollview是strong引用:
@property (nonatomic, readonly, strong) UIScrollView *scrollV
解决方法:
将delegate设置为nil:
- (void) dealloc
& & if(_mWebViewReport)
& & & & _mWebViewReport.scrollView.delegate=
阅读(...) 评论()Android手机应用程序闪退自己是Android初学新手,按照课本上的示例敲代码,结果安装程序成功后,打开其闪退。。。问了好多次度娘,还是没有着落,还请各位前辈帮帮小弟,不胜感激。。。代码如下,还请
Android手机应用程序闪退
自己是Android初学新手,按照课本上的示例敲代码,结果安装程序成功后,打开其闪退。。。问了好多次度娘,还是没有着落,还请各位前辈帮帮小弟,不胜感激。。。
代码如下,还请各位前辈帮帮我。。。
package com.example.
import android.app.A
import android.os.B
import android.view.V
import android.widget.*;
import android.view.View.OnClickL
import android.view.M
import android.view.MenuI
public class MainActivity extends Activity {
private TextView showView=
private TextView note=
private EditText editNum1=
private EditText editNum2=
private Button butadd=
private Button butsub=
private Button butmul=
private Button butdiv=
private int num1=0;
private int num2=0;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
this.showView=(TextView)super.findViewById(R.id.mytext);
this.editNum1=(EditText)super.findViewById(R.id.myeda);
this.editNum2=(EditText)super.findViewById(R.id.myedb);
this.butadd=(Button)super.findViewById(R.id.mybutadd);
this.butsub=(Button)super.findViewById(R.id.mybutsub);
this.butmul=(Button)super.findViewById(R.id.mybutmul);
this.butdiv=(Button)super.findViewById(R.id.mybutdiv);
this.note=(TextView)super.findViewById(R.id.note);
this.butadd.setOnClickListener(new AddListener());
this.butsub.setOnClickListener(new SubListener());
this.butmul.setOnClickListener(new MulListener());
this.butdiv.setOnClickListener(new DivListener());
this.editNum1.setOnClickListener(new OnClickListener(){
public void onClick(View v){
MainActivity.this.editNum1.setText("");
this.editNum2.setOnClickListener(new OnClickListener(){
public void onClick(View v){
MainActivity.this.editNum2.setText("");
private class AddListener implements OnClickListener{
public void onClick(View v){
MainActivity.this.num1=Integer.parseInt(MainActivity.this.editNum1.getText().toString());
MainActivity.this.num2=Integer.parseInt(MainActivity.this.editNum2.getText().toString());
MainActivity.this.note.setText("+");
MainActivity.this.showView.setText(String.valueOf(num1+num2));}
private class SubListener implements OnClickListener{
public void onClick(View v){
MainActivity.this.num1=Integer.parseInt(MainActivity.this.editNum1.getText().toString());
MainActivity.this.num2=Integer.parseInt(MainActivity.this.editNum2.getText().toString());
MainActivity.this.note.setText("-");
MainActivity.this.showView.setText(String.valueOf(num1-num2));}
private class MulListener implements OnClickListener{
public void onClick(View v){
MainActivity.this.num1=Integer.parseInt(MainActivity.this.editNum1.getText().toString());
MainActivity.this.num2=Integer.parseInt(MainActivity.this.editNum2.getText().toString());
MainActivity.this.note.setText("*");
MainActivity.this.showView.setText(String.valueOf(num1*num2));}
private class DivListener implements OnClickListener{
public void onClick(View v){
MainActivity.this.num1=Integer.parseInt(MainActivity.this.editNum1.getText().toString());
MainActivity.this.num2=Integer.parseInt(MainActivity.this.editNum2.getText().toString());
MainActivity.this.note.setText("/");
MainActivity.this.showView.setText(String.valueOf(num1/num2));}
public boolean onCreateOptionsMenu(Menu menu) {
// I this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
public boolean onOptionsItemSelected(MenuItem item) {
// Handle action bar item clicks here. The action bar will
// automatically handle clicks on the Home/Up button, so long
// as you specify a parent activity in AndroidManifest.xml.
int id = item.getItemId();
if (id == R.id.action_settings) {
return super.onOptionsItemSelected(item);
解决方案二:
遇到错误先要看错误日志~~~
把你的错误日志贴出来看看。
解决方案三:
同学,你是这布局文件有问题,你贴这个代码没用的,肯定是你的XML文件里有错误,因为我看你贴出的异常提在setContent()的时候就被抛出了
解决方案四:
从一小部分错误日志猜测可能是布局问题,但是你错误日志贴的太不行了,关键错误只有一小部分可见;请帖全
解决方案五:
错误日志,要贴出报Exetion那段,和CauseBy那段,人家才能帮助到你!
解决方案六:
你把日志往右拉,看右半部分,你哪个com.example.myfirstapplication包下面哪个activity 26行,报错了。。应该是布局的问题。
【云栖快讯】数据库技术天团集体亮相,分享一线生产实践经验,告诉你踩过的坑、走过的路,都是老司机,靠谱!干货分享,不可错过!&&
弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率
稳定可靠、可弹性伸缩的在线数据库服务,全球最受欢迎的开源数据库之一
6款热门基础云产品6个月免费体验;2款产品1年体验;1款产品2年体验
开发者常用软件,超百款实用软件一站式提供为什么自制软件时一添加webview就闪退,没任何错误提示【aide吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0成为超级会员,使用一键签到本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:26,623贴子:
为什么自制软件时一添加webview就闪退,没任何错误提示收藏
还有添加联网权限后为何安卓显示还是没有联网权限,急
我把webview控件一删又没事。。。
&?xml version=&1.0& encoding=&utf-8&?&&manifest xmlns:android=&
package=&com.mycompany.rustedwarfarebox& &
&application
android:allowBackup=&true&
android:icon=&@drawable/icon&
android:label=&@string/app_name&
android:theme=&@style/AppTheme& &
android:name=&.MainActivity&android:launchMode=&singleInstance&
android:label=&@string/app_name& &
&intent-filter&
&action android:name=&android.intent.action.MAIN& /&
&category android:name=&android.intent.category.LAUNCHER& /&
&/intent-filter&
&/activity&&activity android:name=&.bingzhong&&&/activity&&activity android:name=&.lianji&&&/activity&&activity android:name=&.web&&&/activity&
&/application&&uses-permission android:name=&android.permission.INTERNET&/& &/manifest&权限添加哪里不对么
01-13 21:19:51.352
GED com.mycompany.rustedwarfarebox
Failed to get GED Log Buf, err(0)01-13 21:19:52.956
AndroidRuntime com.mycompany.rustedwarfarebox
FATAL EXCEPTION: main01-13 21:19:52.956
AndroidRuntime com.mycompany.rustedwarfarebox
Process: com.mycompany.rustedwarfarebox, PID: 1681901-13 21:19:52.956
AndroidRuntime com.mycompany.rustedwarfarebox
java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mycompany.rustedwarfarebox/com.mycompany.rustedwarfarebox.web}: android.view.InflateException: Binary XML file line #69: Error inflating class Webview
你自己看XML文件的69行是什么问题
改为android.webkit.WebView
WebView中的v是小写?
登录百度帐号推荐应用11949人阅读
Android(34)
&& 今天发现在webview,没有办法加载JS方法,跳不出那种提示框,就是写了webview.getSettings().setJavaScriptEnabled(true); 这一句也完全没用。后来发现网上说的解决方案是用要用到WebChromeClient&,并且重写它里面的几个方法才行。
& MyWebChromeClient.java
package com.example.webview_
import android.app.AlertD
import android.content.DialogI
import android.content.DialogInterface.OnCancelL
import android.content.DialogInterface.OnClickL
import android.content.DialogInterface.OnKeyL
import android.graphics.B
import android.os.M
import android.util.L
import android.view.KeyE
import android.webkit.JsPromptR
import android.webkit.JsR
import android.webkit.WebChromeC
import android.webkit.WebV
import android.widget.EditT
17. * /archives//199.html
//****************************************************************************
public class MyWebChromeClient extends WebChromeClient {
public void onCloseWindow(WebView window) {
super.onCloseWindow(window);
public boolean onCreateWindow(WebView view, boolean dialog,
boolean userGesture, Message resultMsg) {
return super.onCreateWindow(view, dialog, userGesture, resultMsg);
* 覆盖默认的window.alert展示界面,避免title里显示为“:来自file:////”
public boolean onJsAlert(WebView view, String url, String message,
JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle(&对话框&)
.setMessage(message)
.setPositiveButton(&确定&, null);
// 不需要绑定按键事件
// 屏蔽keycode等于84之类的按键
builder.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.i(&onJsAlert&, &keyCode==& + keyCode + &event=&+ event);
// 禁止响应按back键的事件
builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
result.confirm();// 因为没有绑定事件,需要强行confirm,否则页面会变黑显示不了内容。
// return super.onJsAlert(view, url, message, result);
public boolean onJsBeforeUnload(WebView view, String url,
String message, JsResult result) {
return super.onJsBeforeUnload(view, url, message, result);
* 覆盖默认的window.confirm展示界面,避免title里显示为“:来自file:////”
public boolean onJsConfirm(WebView view, String url, String message,
final JsResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle(&对话框&)
.setMessage(message)
.setPositiveButton(&确定&,new OnClickListener() {
public void onClick(DialogInterface dialog,int which) {
result.confirm();
.setNeutralButton(&取消&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
builder.setOnCancelListener(new OnCancelListener() {
public void onCancel(DialogInterface dialog) {
result.cancel();
// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
builder.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.v(&onJsConfirm&, &keyCode==& + keyCode + &event=&+ event);
// 禁止响应按back键的事件
// builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
// return super.onJsConfirm(view, url, message, result);
* 覆盖默认的window.prompt展示界面,避免title里显示为“:来自file:////”
* window.prompt('请输入您的域名地址', &#');
public boolean onJsPrompt(WebView view, String url, String message,
String defaultValue, final JsPromptResult result) {
final AlertDialog.Builder builder = new AlertDialog.Builder(view.getContext());
builder.setTitle(&对话框&).setMessage(message);
final EditText et = new EditText(view.getContext());
et.setSingleLine();
et.setText(defaultValue);
builder.setView(et)
.setPositiveButton(&确定&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.confirm(et.getText().toString());
.setNeutralButton(&取消&, new OnClickListener() {
public void onClick(DialogInterface dialog, int which) {
result.cancel();
// 屏蔽keycode等于84之类的按键,避免按键后导致对话框消息而页面无法再弹出对话框的问题
builder.setOnKeyListener(new OnKeyListener() {
public boolean onKey(DialogInterface dialog, int keyCode,KeyEvent event) {
Log.v(&onJsPrompt&, &keyCode==& + keyCode + &event=&+ event);
// 禁止响应按back键的事件
// builder.setCancelable(false);
AlertDialog dialog = builder.create();
dialog.show();
// return super.onJsPrompt(view, url, message, defaultValue,
// result);
public void onProgressChanged(WebView view, int newProgress) {
super.onProgressChanged(view, newProgress);
public void onReceivedIcon(WebView view, Bitmap icon) {
super.onReceivedIcon(view, icon);
public void onReceivedTitle(WebView view, String title) {
super.onReceivedTitle(view, title);
public void onRequestFocus(WebView view) {
super.onRequestFocus(view);
在加载URL前写上这两行,应用上去
MyWebChromeClient myWebChromeClient = new MyWebChromeClient();
webview.setWebChromeClient(myWebChromeClient);
& 这样就可以了。文章借见:
& MyWebChromeClient.java&适用性蛮大的,我没改就OK了
代码下载:
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:218758次
积分:2832
积分:2832
排名:第12622名
原创:57篇
转载:57篇
评论:26条}

我要回帖

更多关于 wkwebview ios8 闪退 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信