第十三周总结
Java 学习第十三周总结
一、学习概述
本周学习内容涵盖 Android 应用架构设计、插件开发高级特性、性能优化以及 Java Web 基础技术。在 Android 领域,深入学习了 MVC、MVP、MVVM 及 Clean Architecture 等架构模式,并实践了微服务架构在 Android 中的应用;插件开发方面,掌握了代码生成、Gradle 集成等高级功能;性能优化聚焦应用启动优化与用户体验提升;同时学习了 Java Web 中的 Servlet 进阶与 JSP 技术。
二、Android 架构设计实践
- 经典架构模式对比
MVC、MVP、MVVM 架构实现
// MVP模式示例:LoginPresenter
public class LoginPresenter {
private LoginView view;
private LoginModel model;
public LoginPresenter(LoginView view) {
this.view = view;
this.model = new LoginModel();
}
public void login() {
view.showLoading();
String userName = view.getUserName();
String password = view.getPassword();
model.login(userName, password, new LoginCallback() {
@Override
public void onSuccess() {
view.loginSuccess();
view.hideLoading();
}
@Override
public void onFailure(String errorMsg) {
view.loginFailed(errorMsg);
view.hideLoading();
}
});
}
}
// MVVM模式示例:LoginViewModel
public class LoginViewModel extends ViewModel {
private MutableLiveData
private MutableLiveData
private MutableLiveData<Resource
private LoginRepository repository;
public LoginViewModel(LoginRepository repository) {
this.repository = repository;
}
public void login() {
loginResult.setValue(Resource.loading(null));
String user = username.getValue();
String pwd = password.getValue();
repository.login(user, pwd, new LoginCallback() {
@Override
public void onSuccess(User user) {
loginResult.setValue(Resource.success(user));
}
@Override
public void onFailure(String error) {
loginResult.setValue(Resource.error(error, null));
}
});
}
}
Clean Architecture 分层实践
project/
├── app/
│ ├── src/
│ │ ├── main/
│ │ │ ├── java/
│ │ │ │ ├── com/example/clean/
│ │ │ │ │ ├── entity/ # 实体层:User.java
│ │ │ │ │ ├── usecase/ # 用例层:LoginUseCase.java
│ │ │ │ │ ├── data/ # 数据层
│ │ │ │ │ │ ├── repository/ # 仓库:LoginRepository.java
│ │ │ │ │ │ ├── local/ # 本地数据源
│ │ │ │ │ │ └── remote/ # 远程数据源
│ │ │ │ │ └── ui/ # UI层:LoginActivity.java
│ │ │ └── res/
│ └── build.gradle
└── gradle/
2. 微服务架构探索
认证微服务实现
// 服务接口定义
public interface AuthService {
void login(String username, String password, LoginCallback callback);
void logout(String userId, LogoutCallback callback);
interface LoginCallback {
void onSuccess(User user);
void onFailure(String error);
}
}
// 服务实现
public class AuthServiceImpl implements AuthService {
private OkHttpClient client = new OkHttpClient();
private Gson gson = new Gson();
@Override
public void login(String username, String password, LoginCallback callback) {
RequestBody body = new FormBody.Builder()
.add("username", username)
.add("password", password)
.build();
Request request = new Request.Builder()
.url("https://api/auth/login")
.post(body)
.build();
client.newCall(request).enqueue(new Callback() {
@Override
public void onResponse(Call call, Response response) {
if (response.isSuccessful()) {
User user = gson.fromJson(response.body().string(), User.class);
callback.onSuccess(user);
} else {
callback.onFailure("登录失败");
}
}
});
}
}
服务通信与数据一致性
// 事件发布器
public class EventPublisher {
private Connection connection;
private Channel channel;
public EventPublisher() throws IOException {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
connection = factory.newConnection();
channel = connection.createChannel();
channel.queueDeclare("event_queue", true, false, false, null);
}
public void publish(String eventType, String data) throws IOException {
String message = "{\"type\":\"" + eventType + "\",\"data\":" + data + "}";
channel.basicPublish("", "event_queue", null, message.getBytes());
}
}
// 事件消费者
public class EventConsumer {
public void consume(EventCallback callback) {
new Thread(() -> {
try {
ConnectionFactory factory = new ConnectionFactory();
factory.setHost("localhost");
Connection connection = factory.newConnection();
Channel channel = connection.createChannel();
channel.queueDeclare("event_queue", true, false, false, null);
channel.basicConsume("event_queue", false, (tag, delivery) -> {
String event = new String(delivery.getBody());
callback.onEvent(event);
channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false);
}, tag -> {});
} catch (Exception e) {
e.printStackTrace();
}
}).start();
}
}
三、Android 插件开发高级特性
- 智能代码生成
Activity 生成插件实现
// 模板引擎
public class TemplateEngine {
private Configuration config;
public TemplateEngine() {
config = new Configuration(new ClassTemplateLoader(getClass(), "/templates"));
}
public String process(String templateName, Map<String, Object> data)
throws TemplateException, IOException {
Template template = config.getTemplate(templateName);
StringWriter writer = new StringWriter();
template.process(data, writer);
return writer.toString();
}
}
// 生成器
public class ActivityGenerator {
private TemplateEngine engine = new TemplateEngine();
public void generate(Project project, String pkg, String name) {
try {
Map<String, Object> data = new HashMap<>();
data.put("package", pkg);
data.put("activityName", name);
data.put("layoutName", "activity_" + name.toLowerCase());
// 生成Java代码
String javaCode = engine.process("activity.ftl", data);
writeToFile(project, "java/" + pkg.replace('.', '/') + "/" + name + ".java", javaCode);
// 生成布局文件
String layoutCode = engine.process("layout.ftl", data);
writeToFile(project, "res/layout/" + "activity_" + name.toLowerCase() + ".xml", layoutCode);
} catch (Exception e) {
e.printStackTrace();
}
}
}
2. Gradle 集成功能
依赖自动配置
public class GradleDependencyManager {
private Project project;
public GradleDependencyManager(Project project) {
this.project = project;
}
public void addDependency(String modulePath, String dependency) {
File buildFile = new File(project.getBasePath() + modulePath + "/build.gradle");
if (!buildFile.exists()) return;
try {
String content = Files.readString(Paths.get(buildFile.toURI()));
if (content.contains(dependency)) return;
String newContent = content.replace(
"dependencies {",
"dependencies {\n " + dependency + "\n"
);
Files.writeString(Paths.get(buildFile.toURI()), newContent);
GradleProjectImporter.getInstance().refreshProject(project);
} catch (IOException e) {
e.printStackTrace();
}
}
}
四、性能优化与用户体验
- 启动性能优化
启动流程优化
public class AppStartup {
private static final long DELAY_NON_CRITICAL = 1500; // 非关键任务延迟1.5秒
public void init(final Context context) {
// 关键任务 - 主线程执行
initCoreComponents(context);
// 非关键任务 - 子线程延迟执行
new Handler(Looper.getMainLooper()).postDelayed(() -> {
new Thread(() -> {
initAnalytics();
initThirdPartyServices();
}).start();
}, DELAY_NON_CRITICAL);
}
private void initCoreComponents(Context context) {
// 初始化UI框架、数据库连接等关键组件
}
private void initAnalytics() {
// 初始化统计分析组件
}
}
启动性能监控
public class StartupMonitor {
private static final String TAG = "StartupMonitor";
private long startTime;
public void start() {
startTime = System.currentTimeMillis();
}
public void logStage(String stage) {
long elapsed = System.currentTimeMillis() - startTime;
Log.d(TAG, stage + " took: " + elapsed + "ms");
}
public void finish() {
long elapsed = System.currentTimeMillis() - startTime;
Log.d(TAG, "Total startup time: " + elapsed + "ms");
}
}
2. 用户体验优化
交互反馈优化
public class FeedbackButton extends AppCompatButton {
private static final float SCALE = 0.9f;
private static final long DURATION = 150;
public FeedbackButton(Context context) {
super(context);
init();
}
private void init() {
setOnTouchListener((v, event) -> {
if (event.getAction() == MotionEvent.ACTION_DOWN) {
scaleX = SCALE;
scaleY = SCALE;
postDelayed(() -> {
scaleX = 1f;
scaleY = 1f;
}, DURATION);
}
return false;
});
}
}
手势操作支持
public class GestureHandler implements OnTouchListener {
private GestureDetector detector;
private OnSwipeListener listener;
public GestureHandler(OnSwipeListener listener) {
this.listener = listener;
detector = new GestureDetector(new GestureAdapter());
}
@Override
public boolean onTouch(View v, MotionEvent event) {
detector.onTouchEvent(event);
return true;
}
private class GestureAdapter extends SimpleOnGestureListener {
@Override
public boolean onFling(MotionEvent e1, MotionEvent e2, float velocityX, float velocityY) {
float diffX = e1.getX() - e2.getX();
if (diffX > 100 && Math.abs(velocityX) > 200) {
listener.onSwipeLeft();
return true;
} else if (-diffX > 100 && Math.abs(velocityX) > 200) {
listener.onSwipeRight();
return true;
}
return false;
}
}
public interface OnSwipeListener {
void onSwipeLeft();
void onSwipeRight();
}
}
五、Java Web 基础技术
- Servlet 进阶
Servlet 配置与生命周期
// 注解配置
@WebServlet(
name = "LoginServlet",
urlPatterns = "/login",
initParams = {
@WebInitParam(name = "dbUrl", value = "jdbc:mysql://localhost/db"),
@WebInitParam(name = "dbUser", value = "user")
}
)
public class LoginServlet extends HttpServlet {
private String dbUrl;
private String dbUser;
@Override
public void init(ServletConfig config) throws ServletException {
super.init(config);
dbUrl = config.getInitParameter("dbUrl");
dbUser = config.getInitParameter("dbUser");
System.out.println("Servlet initialized with db: " + dbUrl);
}
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
String username = request.getParameter("username");
String password = request.getParameter("password");
// 处理登录逻辑
response.getWriter().write("Login processed for: " + username);
}
@Override
public void destroy() {
System.out.println("Servlet destroyed, cleaning resources");
}
}
2. JSP 技术应用
JSP 指令与内置对象
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ include file="header.jsp" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
Welcome, <%= request.getParameter("username") %>
<%
session.setAttribute("lastVisit", new Date());
application.setAttribute("onlineUsers",
(Integer)application.getAttribute("onlineUsers") + 1);
%>
<p>Last visit: ${sessionScope.lastVisit}</p>
<p>Online users: ${applicationScope.onlineUsers}</p>
<c:if test="${not empty param.error}">
<div class="error">${param.error}</div>
</c:if>
六、本周学习总结与反思
1. 学习成果
1. 掌握 Android 多种架构模式,能根据项目需求选择合适架构
2. 实现微服务架构下的 Android 服务通信与数据一致性方案
3. 开发智能代码生成与 Gradle 集成的 Android 插件功能
4. 掌握应用启动优化策略与用户体验提升技巧
5. 理解 Servlet 生命周期与 JSP 技术,能开发基础 Java Web 应用
2. 存在问题
1. Clean Architecture 中复杂业务逻辑的分层处理经验不足
2. 插件开发中 UI 响应性与性能优化有待提高
3. Java Web 中安全认证与会话管理实践较少
3. 改进方向
1. 通过大型项目实践复杂架构的分层设计
2. 学习插件开发中的异步处理与 UI 优化技术
3. 深入学习 Java Web 安全机制与框架应用
4. 下周计划
1. 学习 Android Jetpack Compose UI 开发
2. 研究插件开发中的性能优化与调试技巧
3. 深入学习 Spring MVC 框架与 RESTful API 开发
4. 实践 Android 应用的持续集成与自动化测试
浙公网安备 33010602011771号