Java笔记

2026-8-17

原始笔记链接:https://cloud.seatable.cn/dtable/external-links/59b453a8639945478de2/

0766 JS Bridge 调用安卓接口

基本原理:通过全局变量+事件驱动,使得安卓系统和JS可以互相通信,在安卓应用内部可以嵌入 JS 代码或网页

1、初始化全局变量链接

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// 如果是安卓端登录,初始化 JSBridge
if (window.mobileLogin) {
  initWebViewJSBridge();
}

function initWebViewJSBridge() {
  connectWebViewJavascriptBridge(function (bridge) {
    bridge.init();
  });
}

function connectWebViewJavascriptBridge(callback) {
  // 如果JS已经初始化,那么调用回调函数 bridge.init
  if (window.WebViewJavascriptBridge && window.WebViewJavascriptBridge.inited) {
    callback(window.WebViewJavascriptBridge);
  }
  // 如果没有初始化,等待发送消息
  else {
    document.addEventListener('WebViewJavascriptBridgeReady',
      function () {
        callback(window.WebViewJavascriptBridge);
      },
      false);
  }
}

2、JS给安卓发消息,通过全局变量,给安卓传参(包括消息类型,数据内容)

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
function playAndroidMedia(index, urls) {
    window.WebViewJavascriptBridge.callHandler('playMediaFile',
        JSON.stringify({ index, urls })
    );
}

function openAndroidComment(data) {
  window.WebViewJavascriptBridge.callHandler('callAndroidFunction', JSON.stringify(
    {
      v: 2,
      action: ANDROID_ACTIONS.COMMENT,
      data: JSON.stringify(data),
    }
  ));
}

3、安卓给 JS 发消息:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
window.WebViewJavascriptBridge.registerHandler('callJsFunction', (data, responseCallback) => {
  // JS 先解析安卓的数据
  const parsedData = JSON.parse(data);

  // 执行对应的操作
  const execActionSucceed = this.handleAction(parsedData);

  // 如果操作成功,那么回调函数给安卓信息
  if (execActionSucceed) {
    responseCallback(JSON.stringify({ success: true }));
  }
});

目前的调试办法是前端先完成代码,然后安卓同事集成到安卓开发环境去调试

0826 flutter 框架构建应用

https://docs.flutter.cn/get-started/install/macos/web

Flutter 类似 react-native,就是一套代码,可以开发出多个终端的 UI 框架。

编程语言:Flutter 使用 Dart 语言 https://dart.cn/ 和 JS 差距不大(单独介绍)

Flutter 可以用一套代码,同时编译出 安卓,IOS,网页的效果(需要 Android Studio, Xcode 等开发平台)

  • android 和 ios 目录分别包含了用于 Android 和 iOS 平台的原生项目配置文件,Flutter 在构建应用时会根据这些文件进行相应的适配和打包工作。

  • lib 目录是存放 Flutter 代码的核心区域,主要的 UI 构建、业务逻辑等代码都在这里编写,其中 main.dart 是整个应用的入口文件。

  • test 目录用于存放应用的测试代码。

  • pubspec.yaml 是项目的配置文件,用于管理项目的依赖包、指定应用的名称、版本等信息,类似其他语言项目中的 package.json 等文件。

1
2
3
4
5
6
7
8
my_app/
├── android/
├── ios/
├── lib/
│   └── main.dart
├── test/
├── pubspec.yaml
└── README.md

类似的产品还有京东的 taro 用于编译各种小程序

有时间可以直接使用 AI 去完成(关键是还需要安卓平台,IOS 平台,还需要服务器等等各种东西)

具体组件和代码实现

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
import 'package:flutter/material.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'My Flutter App',
      home: Scaffold(
        appBar: AppBar(
          title: Text('My App'),
        ),
        body: Center(
          child: Text('Hello, World!'),
        ),
      ),
    );
  }
}

0767 安卓手机上搭建服务器

参考链接:https://blog.csdn.net/weixin_43975684/article/details/105599292

0、手机设置中,打开安装任意软件

1、在安卓机上下载 KSWEB 这个软件,类似 lamp 软件(现在下载需要授权)

2、开启 mysql apache nginx php 基本功能的服务器

3、把代码放在对应的目录中,可以实现局域网内部访问

4、内网穿透,外网可以访问服务器(存在安全问题,测试环境没问题)

0708 java 面相对象案例

Java 案例

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
// 一键控制所有加点的状态
class Light {
  public void on() {
    System.out.printLn('Open light');
  }
  public void off() {
    System.out.printLn('Close light');
  }
}

class Television {
  public void on() {
    System.out.printLn('Open TV');
  }
  public void off() {
    System.out.printLn('Close TV');
  }
}

class Airconditioner {
  public void on() {
    System.out.printLn('Open Air');
  }
  public void off() {
    System.out.printLn('Close Air');
  }
}

// 外观
class Facade {
  Light light;
  Television television;
  Aircondition aircondition;

  // 传参 
  public Facade(Light light, Television television, Airconditioner airconditioner) {
    this.light = light;
    this.television = television;
    this.airconditioner = airconditioner;
  }

  public void on() {
    light.on();
    television.on();
    aircondition.on();
  }

  public void off() {
    light.off();
    television.off();
    aircondition.off();
  }
}

class FacadePattern {
  public static void main(String[] args) {
    // 实例化电器类
    Light light = new Light();
    Television television = new Television();
    Airconditioner airconditioner = new Airconditioner();
    // 传参
    Facade facade = new Facade(light, television, airconditioner);
  }
}

0709 java 基本数据结构

数据结构 特点 适用场景

数组(Array) 固定大小,索引访问,类型一致 固定大小数据集,快速访问

列表(List) 动态大小,有序,允许重复 需要频繁添加、删除元素的数据集

集合(Set) 无序,不允许重复元素 快速查找,去重

映射(Map) 键值对,键唯一 映射关系的数据集,快速访问键对应的值

队列(Queue)FIFO 顺序处理元素 按顺序处理元素的场景