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 顺序处理元素 按顺序处理元素的场景