TRA-1

227 阅读1分钟

Tips

WebView的WebSettings里面调用getUserAgentString会出现runtime exception,需要保护。

X5 WebView的,WebViewClient的部分回调会在某些低版本系统上崩溃,需要保护。

Review

鸿蒙的分布式特性:

基本想法是:把 API 做成 RPC Call。

鸿蒙的 Ability,比安卓的 Activity 概念要宽泛一些,更像是一个 Service。比如 Wifi Device 是一个 Ability,Wifi Enhancer 是一个 Ability,Wifi HotSpot 也是一个 Ability,另外还会有一个 Registra 来做服务注册和查询。具体这些 Ability 是由谁提供的不是很重要,毕竟都是 RPC Call,理论上不在本机也可以。在 SDK 这一侧,这些功能会被包装成普通的 API。

当然这些都不是新概念,老旧的 COM 就已经可以统一 RPC Call 和本地 Call、也连带提供服务注册和查询。后端上这种微服务架构也比较常见。

个人觉得操作系统的 API 也做成这种结构,完全是为了做分布式操作系统,应该是放弃手机专注手表,车等其他系统。

Algorithm

从字符串创建二叉树:4(2(3)(1))(6(5))

import java.util.*;
class TreeNode{
    int val;
    TreeNode left;
    TreeNode right;
    TreeNode(int val){
        this.val = val;
    }
}
public class Main {
    public static void main(String[] args) {
        String str = new String("4(2(3)(1))(6(5))");
        TreeNode root = build(str);
    }
    public static TreeNode build(String str){
        if(str.length()==0 || str.charAt(0)=='-') return null;
        TreeNode root = new TreeNode(str.charAt(0)-'0');
        Stack<Integer> stack = new Stack<>();
        int l1=-1,l2=-1,r1=-1,r2=-1;
        for(int i=1;i<str.length();i++){
            if(str.charAt(i)=='('){
                if(stack.isEmpty()&&l1==-1) l1 = i+1;
                else if(stack.isEmpty()&&r1==-1) r1 = i+1;
                stack.push(i);
            }
            else if(str.charAt(i)==')'){
                stack.pop();
                if(stack.isEmpty()&&l2==-1) l2 = i;
                else if(stack.isEmpty()&&r2==-1) r2=i;
            }
        }
        if(l1==-1||l2==-1) return root;
        String leftstr = str.substring(l1,l2);
        root.left = build(leftstr);
        if(r1==-1||r2==-1) return root;
        String rightstr = str.substring(r1,r2);
        root.right = build(rightstr);
        return root;
    }}