J2ME Polish学习心得(一)----Device Optimization

NVIDIA Drive Orin SDK 图像处理:深入理解 Pitch-Linear 与 Block-Linear 去交织 在NVIDIA Drive Orin平台,Pitch-Linear与Block-Linear并非不同去交织算法,而是同操作在不同内存布局上的应用。Pitch-Linear按行连续存储,兼容通用计算;Block-Linear分块存储,优化硬件缓存局部性,适配VIC、PVA等专用加速器。正确选择布局可避免格式转换开销,提升性能。开发中应根据后端(如CPU、PVA)需求匹配数据格式,优先使用硬件原生布局,并善用VPI的零拷贝机制,实现高效图像处理流水线。 阅读详情
       最近在学习J2ME,但没多久就发现很多头痛的问题,比如不同设备的不同硬件特性,jar和jad的自动打包,Debug的困难等等。但后来我发现这个明为J2ME Plish的项目,发现他简直就是所有J2ME编程折梦寐以求的东西,所以介绍给大家。
       J2ME Polish是德国人的一个开源项目,主页是: http://www.j2mepolish.org/,类似于一个java开发环境的插件。第一篇先介绍一下它的设备优化功能(Device Optimization)。
比如这种经常遇到的情况,你的MIDLet需要发出些声音,你知道支持MMAPI或MIDP2.0设备可以用如下方法:
InputStream is = getClass().getResourceAsStream("/mymid.mid");
Player player = Manager.createPlayer(is, "audio/midi");
player.realize();
player.start();
     但目前MDIP1.0的手机还很多,很多手机有自己的API,比如在Nokia UI中,可以这样:
Sound A=new Sound(400,1000);
A.setGain(100);
A.play(1);
      如果你要是你的程序在这两种手机上都能用,怎么办呢,难道维护两套源代码?这会非常麻烦的。所以,我就想如果Java里有类似C++的编译预处理就好了,可以这样来:
#if 设备支持MMAPI 或 MIDP2.0
//do something here
#elif 设备支持Nokia UI
      //do something diference here           
#endif
然后编译器能自动产生针对不同设备的class文件就好了。这样解决方案可为完美,而J2ME Polish就可以帮你做到这一点,J2ME Polish在某种程度上,使Java有了预处理功能,代码如下:
//#if polish.midp2 || polish.api.mmapi
try{
      InputStream is = getClass().getResourceAsStream("/mymid.mid");
      Player player = Manager.createPlayer(is, "audio/midi");
      player.realize();
      player.start();
      }catch(MediaException me){
//#debug error
      System.out.println("Unable to play midi" + me );
      }catch(IOException ie){
//#debug error
System.out.println("Unable to load midi" + ie );
      }
//#elif polish.api.nokia-ui
      Sound A=new Sound(400,1000);
      A.setGain(100);
      A.play(1);
//#endif
       我想上面的代码我不用解释你也能看懂吧?//#if之类就是J2ME Polish会识别的预处理标志,除了”//”,它与C++中的语法完全相同(//debug 时J2ME Polish提供的debug功能,也很强大,以后解释)。polish.midp之类的就是预定义的一些符号和变量, J2me polish定义了相当丰富的符号和变量,你可以根据设备的不同平台,API,声音,图像处理能力,来编写不同的代码。
        那目标文件是如何生成的呢? J2ME Polish使用ANT作为编译管理工具,在build.xml中,有这么一节:
<requirement name="Identifier" value="Nokia/Series40,Generic/midp2" />
       怎么样,语法很直接吧,意思就是你希望你的程序产生对应于两种平台的结果,就是Nokia S40和一般的支持midp2的手机。J2ME Polish自带一个数据库,device.xml,含有各类手机类型的特性信息,所以,编译时,前一种类型的硬件会自动使用Nokia UI的代码,后一种则会选择midp2的代码。怎么样,是不是很好用?还有很多很好的功能,下次继续。
【Android性能优化】Android 息屏超时自动延长机制:ScreenUndimDetector 源码级解析 本文基于 AOSP Android 16 源码,以 `ScreenUndimDetector` 为核心,深度解析 Android 的"息屏超时自动延长"机制——当用户在屏幕变暗后又手动调亮若干次时,系统会自动持有个临时唤醒锁把屏幕多留会儿。文中完整还原 `POLICY_DIM → POLICY_BRIGHT` 的状态跃迁检测、`mUndimCounter` 连续变亮计数与 `mMaxDurationBetweenUndimsMillis` 间隔重置逻辑。 阅读详情

相关推荐

【Android性能优化】Android内存度量体系:PSS、RSS、USS 与 dumpsys meminfo 的源码级解析

本文基于 AOSP Android 16 源码,以 `Debug.MemoryInfo` 为切入点,系统拆解 Android 内存度量的完整口径体系。文中讲清 dalvik / native / other 三大分类的来源,逐条解析 PSS、SwappablePss、RSS、Private Dirty、Shared Dirty、Private Clean、Shared Clean、SwappedOut、SwappedOutPss 这九个维度的含义与差异,并深入 `other` 分类下 `.so`。

weixin_44081096的博客 557

基于matlab分水岭分割进行肺癌诊断系统(GUI界面)【源码76期】

本系统基于分水岭算法实现图像自动分割,通过MATLAB GUI分步展示灰度化、形态学处理、梯度计算及分割过程。利用Sobel算子提取梯度,结合形态学重建与区域极大值检测获取前景标记,通过距离变换和背景标记生成分水岭变换,最终以彩色叠加方式直观呈现分割结果。系统适用于细胞、颗粒等目标提取,但存在过分割与参数固定等问题,后续可结合深度学习优化精度。

2401_87395509的博客 201

形态学顶帽变换及图像处理中的应用

本文提出在噪声置信映射图C上应用白顶帽变换,以抑制图像纹理引起的虚警。该变换通过3×3方形结构元的开运算,消除小于结构元的孤立点(保留脉冲噪声),并抵消连续高值区域(如纹理或噪声簇)的响应。结果表明,顶帽仅用于后处理去除非孤立噪声,真正检测能力依赖前置数字路径最小代价模块;顶帽无法识别连片噪声簇,其作用仅为压制纹理虚警,而非独立检测器。

大熊 451

解决 Activiti UEL 表达式解析异常 TreeBuilderException

在Activiti工作流中,排他/包容网关条件表达式因嵌套${}导致UEL解析失败,抛出TreeBuilderException。根源在于UEL语法禁止表达式内再次使用${},且需避免XML特殊字符干扰。解决方案包括:移除内部定界符、使用CDATA包裹表达式、确保返回布尔值。建议通过正则扫描、IDE插件校验、编码规范(如单引号字符串、复杂逻辑外置)及测试验证,从源头预防此类问题。

小李同学的博客 267

[071][验证码模块]基于Spring拦截器的验证码认证设计思想

本文介绍基于Spring拦截器的验证码认证设计,通过@CaptchaAuth注解与CaptchaAuthHandlerInterceptor实现声明式验证码校验。结合工厂模式支持多类型验证码(图形、短信等),解耦业务逻辑,提升复用性与可扩展性。方案遵循单职责与开闭原则,无侵入式集成Spring生态,配合全局异常处理器统响应错误,适用于登录、支付等高安全场景。

杨运交的博客 161

JAVA 高级进阶02篇《并发编程三板斧:JMM、CAS与AQS的源码级拆解》

本文深度解析并发编程“三板斧”:JMM内存模型、CAS原子操作与AQS同步框架,结合JDK21源码剖析volatile可见性、CAS的ABA问题及AQS队列机制。通过库存扣减超卖事故复盘,揭示volatile不保证原子性的深层陷阱,强调在高并发场景下应采用CAS+volatile或AQS等正确选型,助力中高级Java开发者攻克2026年面试难题。

风吹淡了悲伤 322

LeetCode hot100——74.搜索二维矩阵:Java 二分模板

重复元素下找边界,必须 lower + upper 两次二分;本题矩阵元素唯次二分即可——两题合起来正好覆盖“存在性 vs 边界”两种查询形态。

weixin_42927227的博客 232

华为 ASG Manager 镜像日志接收链路故障排查流程

本文基于ASGManager V200R001C00SPC100与ASG5305设备,总结“控制台看不到日志”的排查经验。核心思路为:通过asg-diagnose.sh脚本快速定位故障链路——日志流转路径为设备syslog→服务器网卡→Pcap4j抓包→Storm处理→ClickHouse落库→Web展示。任环节中断均会导致日志缺失。重点排查worker.log中的三个关键字(“设备名称不正确”“获取网络接口失败”“_handle为null”),结合PCAP_COUNT_LONG是否递增判断抓包状态。推荐

Merlyj的博客 178

4.java秒杀项目第四课-后端商品后台接口

在后台的Controller中对于需要登录权限的访问接口都要先获取Cookie中的Token,再使用Token从session中获取用户登录信息来判断用户登录情况决定是否放行。命名空间关联(Namespace): 在 TGoodsMapper.xml 文件中,根元素 的 namespace 属性设置为 com.yxl.seckill.mapper.TGoodsMapper,这正好对应于 TGoodsMapper.java 接口的全限定名。只需要在这个方法中进行处理即可。

yxl219的专栏 164

基于springboot+vue的学生信息管理系统的设计与实现 源码+文档

本文分享基于SpringBoot3+Vue3的高校选课管理系统项目,涵盖管理员、教师、学生多角色功能,实现课程管理、选课审批、成绩录入、考勤登记及通知公告等。技术栈为Vue3、ElementPlus、ECharts、SpringBoot3、MyBatis-Plus、SpringSecurity与MySQL。提供源码、数据库、万字文档、答辩PPT及部署指导,支持定制开发与持续技术答疑。获取方式见置顶链接(点我进入)。

大学生毕设选题 / 源码文档 → 置顶文章名片交流 20

AgentScope Java 2.0 企业级 Agent Harness 实战:从 ReActAgent 源码到 16 中间件生产级落地

Component@Tool(description = "根据订单号查询订单状态、金额、商品列表")@Permission(requireApproval = false) // 只读操作无需审批@ToolParam("tenantId") String tenantId // 租户隔离) {@Tool(description = "根据订单号查询物流追踪信息")) {@Tool(description = "发起退款申请,需要人工审批后执行")

qq_36021478的博客 283

简单商城、在线客服管理系统

│ MySQL │ 5.7.43 │ 3306 │ 三个服务各独立库(admin_system / customer_service / online_customer_service) │。│ Redis │ 5.0.14.1(Windows 版) │ 6379 │ 客服/客户 token、坐席在线状态、技能组路由、限流、分配策略应急覆盖 │。消息发送 HTTP/WS 双通道 │。

stormeryang的专栏 57

Java全栈实战 | 1.1-02 IDEA 调教:把“高级记事本“改造成生产力神器,这 8 个配置值得次做好

本文聚焦 IntelliJ IDEA 高效配置,提出“20%投入换80%效率”的实用策略。精选8项高ROI配置:核心快捷键、代码模板、自动导包、Maven国内镜像、Debug进阶技巧、必备插件清单、代码检查(Inspections)及配置同步。强调避免“裸奔”与“洁癖”两极,倡导以最小成本释放IDE最大潜能。附速查表与团队配置管理建议,助力开发者快速上手,专注编码。

源码获取 | 运行部署 | 定制二开修改,如果回复不及时请耐心等待,请见谅。 359

Java 编译、JDK 与 Android 构建入口

Android 项目中的 Java 源码先由 JDK 的 javac 编译成 class,AGP 在 Gradle 任务图里组织后续 Android 构建工作,D8 把字节码转成 dex 并打进 APK。安装后系统启动应用进程,ART 通过类加载器解析 APK 中的 dex,ActivityThread 在绑定应用时经 LoadedApk 和 Instrumentation 创建 Application。所以 Gradle 配置属于构建期,Application.onCreate() 属于运行期;R8 是否

trebleZ的博客 216

JavaScript 数据类型完全指南

本文深入剖析JavaScript类型系统,从栈堆内存模型揭示原始类型与引用类型的本质差异,澄清“按引用传递”误解,详解7大原始类型(尤其Number的浮点精度、安全整数范围、NaN/Infinity/−0等特殊值),并梳理类型转换、检测、序列化等核心机制,直击0.1+0.2!==0.3、[]==![]等经典陷阱,提供工程级解决方案,助开发者规避深层坑点。

小李同学的博客 491

JAVA 高级进阶09篇《Redis深度实战:缓存三兄弟、分布式锁与集群高可用》

本文深度解析Redis缓存三兄弟(穿透、击穿、雪崩)的原理与防御策略,详解布隆过滤器防穿透、延迟双删保致性、Redlock分布式锁的争议与实践,并深入剖析Redis Cluster的16384槽机制与Gossip协议。结合源码级实现,如Redisson看门狗续期机制,全面覆盖2026年中高级Java面试核心考点,助力高效备战。

风吹淡了悲伤 286

SCA 报 netty-resolver-dns 有 DNS 缓存投毒(CVE-2026-45674),可我的 pom 里根本没有它,要管吗?

netty-resolver-dns 有三条 DNS 缓存投毒:CVE-2026-45674、CVE-2026-47691 与 CVE-2026-45673(medium),修复版 4.1.135.Final / 4.2.15.Final。它经 starter-webflux 四层传递进来,pom 里看不到;而 Reactor Netty 的 HttpClient 默认解析器就是它。本文给出 Spring Boot 版本对照、五个对照应用实测,和分钟确认它是否真在发 DNS 查询的方法。

P191117的博客 272
上一篇: chromatron,反射镜游戏一代心得
下一篇: 容易被忽略的罗大佑歌曲
Fortress
博客等级 码龄27年 2粉丝 29原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值