umeng社交分享最新版5.0的跨进程使用崩溃的问题及解法-Android
先简单介绍下5.0版的变化。5.0最大的特色是调用简单,采用了链式语法,形如:
new ShareAction(context).setPlatform(share_media)
.withText(content).withTitle(title)
.withMedia(icon)
.withTargetUrl(url)
.share();
其次,API更加灵活,支持分享按钮的点击回调;
最后,采用了最新的sdk(新浪微博原生体验更好、支持易信)。
但是有一个很大的问题,那就是当分享代码不在默认的进程(以下称main进程)里时,回调会报空指针异常。
比如在AndroidManifest.xml新开了一个进程用来打开h5页面,点了微信分享,然后点取消,从微信返回APP的时候就报空指针异常崩溃了(别和我说你不知道新开进程的好处和意义,看我微信朋友圈1月4日分享的《微信客户端架构演进之路》吧)。AndroidManifest.xml的配置如下,关键是红色代码部分新开了一个叫tools的进程:
<activity
android:name=".ACWebview"
android:process=":tools"
android:screenOrientation="portrait">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data android:scheme="makai" />
</intent-filter>
</activity>
崩溃日志如下:

java.lang.RuntimeException:Unable to start activity ComponentInfo{com.xxx/com.xxx.wxapi.WXEntryActivity}: java.lang.NullPointerException
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2189)
......
cause by:
java.lang.NullPointerException:
com.umeng.socialize.handler.UMWXHandler.onShareCallback(UMWXHandler.java:462)
com.umeng.socialize.handler.UMWXHandler$5.onResp(UMWXHandler.java:487)
com.umeng.socialize.weixin.view.WXCallbackActivity.onResp(WXCallbackActivity.java:52)
com.tencent.mm.sdk.openapi.WXApiImplV10.handleIntent(Unknown Source)
com.umeng.socialize.weixin.view.WXCallbackActivity.onCreate(WXCallbackActivity.java:30)
android.app.Activity.performCreate(Activity.java:5251)
android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1087)
android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2153)
android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2238)
android.app.ActivityThread.access$800(ActivityThread.java:138)
android.app.ActivityThread$H.handleMessage(ActivityThread.java:1201)
android.os.Handler.dispatchMessage(Handler.java:102)
android.os.Looper.loop(Looper.java:136)
android.app.ActivityThread.main(ActivityThread.java:5016)
java.lang.reflect.Method.invokeNative(Native Method)
java.lang.reflect.Method.invoke(Method.java:515)
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:792)
com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
dalvik.system.NativeStart.main(Native Method)

根据上面的日志,空指针异常的原因是UMWXHandler.java的回调umShareListener为null(如下图,至于为什么是null,因为sdk不是我们写的,无法从sdk层面去解决故没有去深究,但我们要从应用层面去解决问题):
进一步分析日志,发现入口是
com.umeng.socialize.weixin.view.WXCallbackActivity.onCreate(WXCallbackActivity.java:30)
想起我们工程里有一个叫WXEntryActivity.java的继承了它,既然是onCreate报的异常,那可以try catch捕捉这个异常以防止崩溃。说干就干,代码如下:

import android.os.Bundle; import com.umeng.socialize.weixin.view.WXCallbackActivity; public class WXEntryActivity extends WXCallbackActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
try {
super.onCreate(savedInstanceState);
}catch (Exception e){
finish();
}
}
}

由此跨进程调用分享取消时崩溃的问题解决了。
同理微博的那个WBShareActivity.java也类似处理了吧。
umeng社交分享最新版5.0的跨进程使用崩溃的问题及解法-Android的更多相关文章
- iKcamp出品|微信小程序|工具安装+目录说明|基于最新版1.0开发者工具初中级教程分享
iKcamp官网:http://www.ikcamp.com 访问官网更快阅读全部免费分享课程:<iKcamp出品|全网最新|微信小程序|基于最新版1.0开发者工具之初中级培训教程分享>. ...
- IOS_OC_百度地图与社交分享
前奏. 知识点介绍 一. 导航和画线 地图画线 (理解) 二. 百度地图 集成百度地图 (掌握) POI检索 (掌握) 三. 社交分享 系统自带分享 (了解) 友盟分享 (掌握) SSO授权 (理解) ...
- 照片大管家iOS-实现本地相册、视频、安全保护、社交分享一站式功能,源码开放
<照片大管家> APP功能: 1.本地照片批量导入与编辑 2.本地视频存储与播放 3.手势密码.数字密码.TouchID安全保护 4.QQ.微信.微博.空间社交分享 5.其他细节功能. 运 ...
- 微信小程序教学第二章:小程序中级实战教程之预备篇 - 项目结构设计 |基于最新版1.0开发者工具
iKcamp官网:http://www.ikcamp.com 访问官网更快阅读全部免费分享课程:<iKcamp出品|全网最新|微信小程序|基于最新版1.0开发者工具之初中级培训教程分享>. ...
- 照片管家iOS-实现本地相册、视频、安全保护、社交分享源码下载Demo
<照片管家> APP功能: 1.本地照片批量导入与编辑 2.本地视频存储与播放 3.手势密码.数字密码.TouchID安全保护 4.QQ.微信.微博.空间社交分享 5.其他细节功能. 运用 ...
- Iconfont(矢量图标)+iconmoon(图标svg互转)配合javascript来打造属于自己的个性化社交分享系统
原文转载自「刘悦的技术博客」https://v3u.cn/a_id_143 每一个应用程序,其实都会有分享的需求,比如一键分享一篇文章或者一些活动到微博或者微信亦或者是twitter等社交平台,因为人 ...
- 4G来临,短视频社交分享应用或井喷
因为工作的原因,接触短视频社交应用的时间相对较多,不管是自家的微视,还是别人家的Vine.玩拍.秒拍等,都有体验过.随着时间的推移,我愈发感受到有一股似曾相识的势能正在某个地方慢慢积聚,直到今天我才猛 ...
- 15 款 jQuery 社交分享插件
过去几年中社交媒体越来越流行了,能够分享音乐.视频.图像甚至是其他的 docs 文档到互联网上去,这样子还能够提高页面的点击量.通常,一些社交媒体插件都能允许你的用户分享你网站上的内容到其他的社交平台 ...
- .NET技术-4.0. NETCORE跨域
.NET技术-4.0. NETCORE跨域 1.安装程序CORS程序包,一般默认都带了此程序包的 Install-Package Microsoft.AspNetCore.Mvc.Cors 2.配置C ...
随机推荐
- NSString和SwiftString的区别和使用场景
当下Swift项目已经越来越多,可能会经常见到 str as NSString 或者 str as String 字符串在这两者之间的来回切换,因为有些操作用OC字符串比较方便,而有些操作则相反,熟 ...
- Android 加载大图片到内存
本文演示android中图片加载到内存 首先设计界面: 代码如下: <LinearLayout xmlns:android="http://schemas.android.com/ap ...
- 手动配置 Android SDK
下载地址与说明http://www.androiddevtools.cn/#sdk-list 手动添加 SDK 这是Android开发所需的sdk,下载并解压后,将解压出的整个文件夹复制或 ...
- 【代码笔记】iOS-给背景图赋值颜色
代码: - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view. // ...
- HTML5 结构性标签 行内语义性标签
结构性标签: <!DOCTYPE html> <html> <head lang="en"> <meta charset="UT ...
- Android消息机制源码分析
本篇主要介绍Android中的消息机制,即Looper.Handler是如何协同工作的: Looper:主要用来管理当前线程的消息队列,每个线程只能有一个Looper Handler:用来将消息(Me ...
- ASP.NET中常用的几个李天平开源公共类LTP.Common,Maticsoft.DBUtility,LtpPageControl
ASP.NET中常用的几个开源公共类: LTP.Common.dll: 通用函数类库 源码下载Maticsoft.DBUtility.dll 数据访问类库组件 源码下载LtpPageC ...
- 详解javascript,ES5标准中新增的几种高效Object操作方法
1.Object 对象 (JavaScript) 提供对所有 JavaScript 对象通用的功能.参考网站:https://msdn.microsoft.com/zh-cn/library/kb6t ...
- UML类图的关系
多态 泛化(Generalization) [定义]:是一种继承关系,表示一般与特殊的关系,它指定了子类如何特化父类的所有特征和行为 [UML表示]:带三角箭头的实线,箭头指向父类 [代码表现]:A类 ...
- 今天说一下Top ~
Top这个关键字,大家都不陌生~尤其是很多时候打开SSMS的时候右键表名,选择前1000行的时候,就可以见到编译出来的语句 Select top 1000 XXX from XXX 好~我们先看看To ...