功能开关
统跳中心
动态修复:热修复、资源包更新
自主修复:安全模式
首先,需要让App具备一些高级的能力,我们对于任何要上线的新功能,要加上一个功能的开关,通过配置中心下发的开关呢,来决定是否要显示新功能的入口。如果有异常情况,可以紧急关闭新功能的入口,那就可以让这个App处于可控的状态了。
然后,我们需要给App设立路由跳转,所有的界面跳转都需要通过路由来分发,如果我们匹配到需要跳转到有bug的这样一个新功能时,那我们就不跳转了,或者是跳转到统一的异常正处理中的界面。如果这两种方式都不可以,那就可以考虑通过热修复的方式来动态修复,目前热修复的方案其实已经比较成熟了,我们完全可以低成本地在我们的项目中添加热修复的能力,当然,如果有些功能是由RN或WeeX来实现就更好了,那就可以通过更新资源包的方式来实现动态更新。而这些如果都不可以的话呢,那就可以考虑自己去给应用加上一个自主修复的能力,如果App启动多次的话,那就可以考虑清空所有的缓存数据,将App重置到安装的状态,到了最严重的等级呢,可以阻塞主线程,此时一定要等App热修复成功之后才允许用户进入。
隐式启动,利用URI,和上面的action类似,只是这里由action转成了uri
步骤一:首先需要定义符合URI通信的协议,这里很简单:hello://test.uri.activity?action=123&secret=buder
(1)scheme协议:hello
(2)host路由地址:test.uri.activity
(3)?query参数:query参数可以有多个,是键值对的表示方式,键值对之间用&连接。本例中key=action,value=123
步骤二:协议定义好后,需要在intent中添加上action字段,这里我们还是自定义self_define_uri作为action字段
/**
* 方式三:URI跳转
*/
String uriString = "hello://test.uri.activity?action=123&secret=buder";
Uri uri = Uri.parse(uriString);
Intent intent = new Intent("self_define_uri");
//Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(uri);
startActivity(intent);
public static Uri getRouteUri(Action action){
try {
Uri.Builder builder=new Uri.Builder();
builder.scheme(action.scheme);
builder.authority(action.host);
builder.path(action.path);
Map<String, String> query=action.query;
if(query!=null&&!query.isEmpty()){
for (Map.Entry<String, String> entry:query.entrySet()){
builder.appendQueryParameter(entry.getKey(), entry.getValue());
}
}
return builder.build();
} catch (Exception e) {
Log.e(TAG, "getRouteUri: build route uri error, action="+action, e);
return null;
}
}
网友评论