umeng社交分享最新版5.0的跨进程使用崩溃的问题及解法-Android
2016-01-16 14:24
711 查看
先简单介绍下5.0版的变化。5.0最大的特色是调用简单,采用了链式语法,形如:
其次,API更加灵活,支持分享按钮的点击回调;
最后,采用了最新的sdk(新浪微博原生体验更好、支持易信)。
但是有一个很大的问题,那就是当分享代码不在默认的进程(以下称main进程)里时,回调会报空指针异常。
比如在AndroidManifest.xml新开了一个进程用来打开h5页面,点了微信分享,然后点取消,从微信返回APP的时候就报空指针异常崩溃了(别和我说你不知道新开进程的好处和意义,看我微信朋友圈1月4日分享的《微信客户端架构演进之路》吧)。AndroidManifest.xml的配置如下,关键是红色代码部分新开了一个叫tools的进程:
崩溃日志如下:
根据上面的日志,空指针异常的原因是UMWXHandler.java的回调umShareListener为null(如下图,至于为什么是null,因为sdk不是我们写的,无法从sdk层面去解决故没有去深究,但我们要从应用层面去解决问题):
想起我们工程里有一个叫WXEntryActivity.java的继承了它,既然是onCreate报的异常,那可以try catch捕捉这个异常以防止崩溃。说干就干,代码如下:
由此跨进程调用分享取消时崩溃的问题解决了。
同理微博的那个WBShareActivity.java也类似处理了吧。
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也类似处理了吧。
相关文章推荐
- android training管理应用的内存
- Android6.0权限申请
- Android5.0失效API统计及解决兼容的方法
- 将EditText的光标定位到字符的最后面
- [置顶] Android 小问题 集锦
- android logo:内核、android开机动画
- android电池(五):电池 充电IC(PM2301)驱动分析篇
- android电池(四):电池 电量计(MAX17040)驱动分析篇
- android 电池(三):android电池系统
- android 电池(一):锂电池基本原理篇
- Android性能优化典范(三)
- android Wear优化
- Android 实现ListView不可滚动效果
- android 电池(二):android关机充电流程、充电画面显示
- Android系列之图片选择的两种方式
- AdapterView和Adapter
- 应用插件化实践--DroidPlugin的使用
- Android中viewPager的一两点使用
- Android 页面跳转和数据传递
- Android性能优化典范(2)