当开发中遇到这些问题,你们都是如何解决的?(真实案例)

1.插件化框架shadow,在使用时是否有方法可以把插件里的回调反馈给宿主?

如:通过接入shadow, 我宿主APK 启动插件到业务代码,需要业务代码执行完一些列逻辑后,通过接口回调及时返回数据给宿主APK,然后宿主通过插件返回的数据进行业务操作,有好的建议和思路吗?主要宿主和插件是跨进程通讯的,插件里业务代码的接口回调如何及时通知到宿主?

问题正解

是的,在使用插件化框架 Shadow 时,可以通过回调的方式将插件中的事件反馈给宿主。具体来说,可以在宿主中定义一个接口,插件可以实现这个接口,并在适当的时候调用宿主的接口方法来反馈事件。

以下是一个简单的示例代码,演示如何实现插件和宿主之间的回调:

在宿主中定义一个接口:

csharp 复制代码
public interface PluginCallback {
    void onPluginEvent(int eventType, Object eventData);
}

在插件中实现这个接口,并在适当的时候调用宿主的接口方法:

typescript 复制代码
public class MyPluginClass implements PluginCallback {
    private PluginCallback mHostCallback;

    public void setHostCallback(PluginCallback callback) {
        mHostCallback = callback;
    }

    @Override
    public void onPluginEvent(int eventType, Object eventData) {
        // 在适当的时候调用宿主的回调方法
        if (mHostCallback != null) {
            mHostCallback.onPluginEvent(eventType, eventData);
        }
    }
}

在宿主中加载插件,并将宿主的回调接口传递给插件:

ini 复制代码
// 在宿主中加载插件
PluginManager pluginManager = Shadow.getPluginManager();
Plugin plugin = pluginManager.loadPlugin("myplugin.apk");

// 获取插件中的类实例
Class<?> pluginClass = plugin.getClassLoader().loadClass("com.example.MyPluginClass");
Object pluginInstance = pluginClass.newInstance();

// 将宿主的回调接口传递给插件
if (pluginInstance instanceof PluginCallback) {
    ((PluginCallback) pluginInstance).setHostCallback(mHostCallback);
}

在插件中调用宿主的回调方法:

scss 复制代码
// 在插件中调用宿主的回调方法
if (mHostCallback != null) {
    mHostCallback.onPluginEvent(eventType, eventData);
}

请注意,上述示例代码是一个简单的示例,您需要根据您的实际需求进行修改和扩展。同时,在使用插件化框架时,请注意安全性和稳定性,以避免可能的安全问题和崩溃。

2.关于App性能优化的三个问题

问题1:apk瘦身如何优化依赖的第三方SDK中的图片?

自己项目中图片的可以通过转换格式,比如tinyPng、webp等,第三方SDK中的图片资源也想要压缩,该怎么做呢?有哪些具体的方案?

答案解析:

1、在以前老版的agp中能够利用aapt处理resource的task获取该task的输入获取到所有会打包的资源,然后去完成才资源的处理。现在新版的换成了aapt2,这个处理和以前不一样了,agp不同版本总会有一些大大小小变化,需要根据你是要的agp版本去分析。

问题2:App启动优化如何收拢第三方SDK中的线程池?

现在想请教具体的方案,比如用字节码插桩的方式修改第三方SDK中的线程池,实现思路是怎样的?会不会有什么问题?

答案解析:

2、agp老版transform,新版asmclassvisitorfactory能够获得所有class,此时利用asm可以分析class的信息,当发现异步线程同样可以利用asm去修改他的字节码。

问题3:线上卡顿监控的日志系统如何设计?

最近面试APM有被问到日志系统的问题,像线上内存监控和卡顿监控都有被问到

求助:若以卡顿监控为例,如何设计一个日志系统?整体思路是怎样的?需要注意哪些问题?

3、日志系统可以参考美团logan或者腾讯xlog。

logan:tech.meituan.com/2018/10/11/...
tech.meituan.com/2018/02/11/...
水一波~今日分享到此结束,对你有帮助的话,点个赞再走呗,每日一个面试小技巧
关注公众号:Android老皮

解锁 《Android十大板块文档》 ,让学习更贴近未来实战。已形成PDF版

内容如下

1.Android车载应用开发系统学习指南(附项目实战)
2.Android Framework学习指南,助力成为系统级开发高手
3.2023最新Android中高级面试题汇总+解析,告别零offer
4.企业级Android音视频开发学习路线+项目实战(附源码)
5.Android Jetpack从入门到精通,构建高质量UI界面
6.Flutter技术解析与实战,跨平台首要之选
7.Kotlin从入门到实战,全方面提升架构基础
8.高级Android插件化与组件化(含实战教程和源码)
9.Android 性能优化实战+360°全方面性能调优
10.Android零基础入门到精通,高手进阶之路

相关推荐
Jewel10543 分钟前
Flutter代码混淆
android·flutter·ios
Yawesh_best2 小时前
MySQL(5)【数据类型 —— 字符串类型】
android·mysql·adb
曾经的三心草4 小时前
Mysql之约束与事件
android·数据库·mysql·事件·约束
guoruijun_2012_48 小时前
fastadmin多个表crud连表操作步骤
android·java·开发语言
Winston Wood8 小时前
一文了解Android中的AudioFlinger
android·音频
B.-10 小时前
Flutter 应用在真机上调试的流程
android·flutter·ios·xcode·android-studio
有趣的杰克10 小时前
Flutter【04】高性能表单架构设计
android·flutter·dart
大耳猫15 小时前
主动测量View的宽高
android·ui
帅次18 小时前
Android CoordinatorLayout:打造高效交互界面的利器
android·gradle·android studio·rxjava·android jetpack·androidx·appcompat
枯骨成佛19 小时前
Android中Crash Debug技巧
android