3.4.1

lynx-family/lynx3.4.1Sep 1, 2025by Kingatnuaa0528

AI Summary

Bug fix release addressing issues in version 3.4.0. Includes fixes for sticky node click events, list-item recycling, resource fetcher configuration, and various event handling issues. Also adds optimizations for LynxView lifecycle tracing and memory monitoring.

Key Highlights

  • Added setUIRunningMode API to LynxViewBuilder
  • Fixed sticky node click issues in scroll containers
  • Added recyclable property for list-item
  • Fixed prepainting mode measure/layout blocking
  • Memory usage tracking improvements
  • Performance entry type-safe property converters

New Features

  • setUIRunningMode API for LynxViewBuilder
  • Recyclable property for list-item
  • Custom fetcher configuration support
  • animate types for MainThread.Element
  • MeaningfulPaintingArea support on Android

Full Release Notes

# Changelog

**Some bugfix have been made based on version 3.4.0.** 
---

### 🐛 Bug Fixes


- [BugFix] Add `setUIRunningMode` api to fix compile error ([ad11bac](https://github.com/lynx-family/lynx/commit/ad11bac61a85dbc31764fa18c0ce26ac40b3b501))  @nhsprite

	
	Add `setUIRunningMode` api to LynxViewBuilder, to fix some compile error happended on host app.
	
	NoLanding: release/3.4
	
	(cherry picked from commit c37f9d5ffa9c3f7f91fad405b28ffaf8f598d416)


- [BugFix][Event] Fix the abnormal click issue of sticky nodes. ([669cdd1](https://github.com/lynx-family/lynx/commit/669cdd11367ee1e5464b326fb5bdfdd99bbf4c73))  @rAY-ooo

	
	description: In the scroll container, the sticky node will be translated to the correct position, and this translation offset needs to be taken into account. Therefore, we need to record this offset in OffsetXForCalcPosition/OffsetYForCalcPosition.
	
	
	
	(cherry picked from commit 420dd102cbd6c0844f3994c38315d23a819e8d4e)


- [BugFix][typings] Add recyclable property for list-item. ([8e43a10](https://github.com/lynx-family/lynx/commit/8e43a1048e0e65d3bd471c00149c58daf58fda3c))  @DwwWxx

	
	Add recyclable property for list-item.
	
	
	NoLanding: develop


- [BugFix] disable generic resource fetcher if has custom fetcher ([583ad5c](https://github.com/lynx-family/lynx/commit/583ad5cd3bd72b28473d25e6daec24f5aa6fe277))  @linxs0211

	
	1.add setHasCustomFetcher for custom fetcher
	2.disable new media fether when has custom fetcher for image


- [BugFix] Add `animate` types for `MainThread.Element` ([23d9975](https://github.com/lynx-family/lynx/commit/23d997547bfbd57e8cf5311af0312ffe52fd6f59))  @f0rdream

	
	Add missing `animate` types in MTS
	
	


- [BugFix] block the `measure` & `layout` pipeline in prepainting mode. ([005b87e](https://github.com/lynx-family/lynx/commit/005b87e32214ad21979ae90378832309f92ba940))  @nhsprite

	
	in engine reuse cases, `measure` & `layout` will be manually triggered to consume the layout_requested flag, it will cause bad cases
	that if lynxView with prepainting mode get a reused engine from pool, the `measure` & `layout` process will occurs npe because the loadTemplate
	has not be called, the subview is null here.
	
	so we will blocking the `measure` & `layout` process in prepainting mode
	
	


- [BugFix][Harmony] Fix `MergeGlobalProps` method by adding early return for invalid input ([01a4074](https://github.com/lynx-family/lynx/commit/01a407475919f19cc97d2139a8a5fa8b4d645f9e))  @rel-q

	
	Add null/invalid check for global_props parameter before processing
	
	
	(cherry picked from commit 4f6239d4151aa16d98c485ea0d11c63ba2ad5afc)


- [BugFix] Add `animate` types for `MainThread.Element` ([ace1e75](https://github.com/lynx-family/lynx/commit/ace1e7562628fb88e769e7d2ef9116763856cb25))  @f0rdream


- [BugFix][Android][Gesture] Fix pan gesture `onEnd` callback event is null ([55cb9be](https://github.com/lynx-family/lynx/commit/55cb9bed3490e5ecc31b7e132effa33cfa7150e4))  @AdrianLCA

	
	Fix pan gesture `onEnd` callback event is null
	
	
	Autoland: release/3.4
	
	
	(cherry picked from commit 18fba7e8828f9d0185fe5e4a1367584392af4e47)
	
	(cherry picked from commit 1e55076a70ac2706867461efe0ef966e9214e052)


- [BugFix] Fix lynx.loadScript lose app scope ([640c6c6](https://github.com/lynx-family/lynx/commit/640c6c6f15a1b2f73ce237919ea53480d8ee8727))  @lybvinci

	
	the script's format may align with another js. we should wrapper it also
	
	
	(cherry picked from commit 30a434937dfcc9160d029c79fc18505bc9ae5b19)


- [BugFix] Fix SelectorQuery types ([df6809e](https://github.com/lynx-family/lynx/commit/df6809e867d3a19b0865d0a11167833c18aaf19c))  @Yradex

	
	Fix types of selectAll() of SelectorQuery.


- [BugFix] Fix lynx layout proxy error in lynx context ([854b91b](https://github.com/lynx-family/lynx/commit/854b91bd203242aa9733735501e3ed3e60a9a333))  @ci_lynx

	
	when layout proxy not set, we run layou task directly
	
	
	
	(cherry picked from commit 65f581051a3bd5793e90fd192a3f99651ee05a85)


- [BugFix][Event] Fix memory leak caused by mIntervalRunnableForLynxView. ([f09b691](https://github.com/lynx-family/lynx/commit/f09b6914e6d9e191f943c7cfeac6935b4af540fa))  @rAY-ooo

	
	description: In the scroll container, the sticky node will be translated to the correct position, and this translation offset needs to be taken into account. Therefore, we need to record this offset in OffsetXForCalcPosition/OffsetYForCalcPosition.
	
	
	
	(cherry picked from commit b1c7d304399dd6cc8c5752eb70a55a8835792207)


- [BugFix] Register DevToolService in LynxExplorer and update deprecated APIs ([993637d](https://github.com/lynx-family/lynx/commit/993637d90393d462d9b9fdcb2e9a937f7fb143bf))  @ci_lynx

	
	- Register DevToolService in LynxExplorer
	- Replace deprecated overwrite methods:
	  - LynxEnv#init
	  - LynxServiceCenter#registerService.
	
	
	
	(cherry picked from commit a3b866415a2342279cfa223b747af684ffb96916)


- [BugFix][NativeModule] Android & iOS record callback Thread Start Trace separately ([d36aa48](https://github.com/lynx-family/lynx/commit/d36aa48dbe1dce31dc157f046beeb344029a958d))  @OverWatch-Winder

	
	Android & iOS record callback Thread Start Trace separately
	
	


- [BugFix][Harmony] Fix sticky info update not responded to scroll-view ([c09ff2e](https://github.com/lynx-family/lynx/commit/c09ff2ebf7c64f1ceb54578308ad24c636a5ac64))  @DwwWxx

	
	In this commit, we add two opportunities to update scroll-view's child nodes sticky translation:
	
	1. If noly child node's sticky info has changed without any scroll with scroll-view, we need to invoke UIScroll::OnScrollSticky to re-calculate translation.
	
	2. If scroll-view's layout info has changed which triggers scroll but not send ON_SCROLL_EVENT, we need to invoke UIScroll::OnScrollSticky to re-calculate translation.
	
	
	
	(cherry picked from commit 2b5931bf4a6ff5b85ece4f991d7c495e6c3aeb66)


- [BugFix][Harmony] fix the gesture problem of scroll container ([cd9e092](https://github.com/lynx-family/lynx/commit/cd9e092e176743d84f8d79fad192a9d8eb38ce96))  @keweibing

	
	when the contentSize < viewSize, needs to pass-through the touch gesture
	
	https://github.com/lynx-family/lynx-website/pull/329
	
	


- [BugFix][Event] Fix the abnormal click problem caused by overflow. ([6f4057e](https://github.com/lynx-family/lynx/commit/6f4057edb421101fdbcbf661483d7fe0cc64391b))  @rAY-ooo

	
	description: The default overflow value of UIBase is false. Except for UIView and UIComponent, other components should inherit UIBase to implement it. For components that inherit UIView, the DefaultOverflowValue interface should be rewritten to ensure that the default overflow value is false.
	
	
	
	(cherry picked from commit 36443262b03cae1a6ae022b377ff3ce431e64a5f)
### 🚀 Optimization


- [Optimize] add trace to LynxView's onMeasure, onLayout, onAttachToWindow, onDetachedFromWindow functions. ([eb5cb3e](https://github.com/lynx-family/lynx/commit/eb5cb3e75acea9daf66f43334ae26e339921ed75))  @ShouruiSong

	
	This merge request aims to add tracing capabilities to LynxView’s critical lifecycle methods—`onMeasure`, `onLayout`, `onAttachedToWindow`, `onDetachedFromWindow`, and `updateViewport`—to enhance performance monitoring and issue diagnostics. These trace events will provide visibility into the execution of these methods for developers.
	
	1. **Constant Definitions**:
	   - Added constants like `LYNX_VIEW_ON_MEASURE`, `LYNX_VIEW_ON_LAYOUT`, etc., in the `TraceEventDef` class and updated corresponding definitions in the `lynx_android.api` file.
	
	2. **Trace Event Integration**:
	   - Added `LYNX_VIEW` tracing metadata to the `beginSection` method in the `LynxTemplateRender` class.
	   - Introduced `onTraceEventBegin` and `onTraceEventEnd` methods in the `LynxView` class to wrap lifecycle method executions with trace events.
	
	3. **Parameter Passing**:
	   - Critical parameters such as `INSTANCE_ID`, `LYNX_VIEW`, `WIDTH_MEASURE_SPEC`, `HEIGHT_MEASURE_SPEC`, and `PARAMS` are included in trace events for granular analysis.
	
	
	(cherry picked from commit aaa691ff7872d7c2c5b9abd05e6241eb531ecd50)


- [Optimize] Set exception handler to OnceTask such that we can see the error message from log box. ([28afcb4](https://github.com/lynx-family/lynx/commit/28afcb40493b64c6444fc3b3899f9cc1be15886f))  @ShouruiSong

	
	The core objective of this merge request is to enhance the `OnceTask` class by adding exception handling capabilities, enabling developers to view error details in logs. This exception handling mechanism improves code robustness and maintainability, facilitating issue diagnosis and resolution when exceptions occur.
	
	1. **`OnceTask` Class Updates**
	   - Added a new constructor `OnceTask(final Callable< T > task, Consumer< Exception > exceptionHandler)` to `lynx_android.api`.
	   - Introduced the `mExceptionHandler` member variable in `OnceTask.java` and implemented the new constructor. The `get` method now invokes `mExceptionHandler.accept()` when catching exceptions, provided the handler is non-null.
	
	2. **Dependent Class Adjustments**
	   - Updated `LynxUI.java` and `UIBody.java` to instantiate `OnceTask` using the new constructor. Exception handling logic now triggers the `context.handleException()` method on errors.
	
	3. **Test Case Additions**
	   - Added the `testExceptionHandle` method in `OnceTaskTest.java` to validate the exception handling functionality.
	
	
	(cherry picked from commit 6070e5c43caa6f4b0eac9b746280ee10f9e00921)


- [Optimize] Update `fetch` type defines ([353b1aa](https://github.com/lynx-family/lynx/commit/353b1aa0486e4b14c1982fe25e01253236ceca7e))  @huzhanbo1996

	
	Update `fetch` type defines
	
	
	


- [Optimize][Trace] Use flowId to chain native update data calls across different threads ([4851076](https://github.com/lynx-family/lynx/commit/48510765c5f4ca9d346c70a6f7016d4cdf32f710))  @KingAlen

	
	Currently, it is not straightforward to identify the corresponding App::update for each native update data. By using flowId to link them, it becomes easier to track the association between the main thread and background thread.
	
	
	(cherry picked from commit 1db1e4b336700bf0333e52c843e4b73f25ab7989)


- [Optimize] Fix `transition` update and `transition-property` remove issue in Radon Arch ([8d74ef9](https://github.com/lynx-family/lynx/commit/8d74ef9d166eb61dc7e5ae5c3126fcc66fb2e6ee))  @YellowFishWyfCPP

	
	Problem: Fixed Transition failure in specific cases under Radon architecture.
	
	Reason: In one update, both the 'transition property' and the 'transition' were removed. Since the deletion logic was handled first, the style was removed without the transition, resulting in no expected motion.
	
	Fixed: Check if there is an update to the 'transition' in the updated stylemap before updating, if so consume it first.
	
	Impact: The fix logic is controlled by Settings: fix_radon_transition_property_remove_bug. After a major release is confirmed, the impact is controllable.
	
	
	(cherry picked from commit 14a725c045f3018df783f862f39ce95c8d0d4922)


- [Optimize] Support MeaningfulPaintingArea on Android to monitor Lynx's meaningful painting areas. ([3619462](https://github.com/lynx-family/lynx/commit/36194621ca88520e9460a7051cf43b463fee167c))  @ShouruiSong

	
	This merge request aims to add support for Meaningful Painting Area in the Lynx framework on the Android platform, to monitor Lynx's meaningful painting areas.
	
	1. **New classes and interfaces added**:
	   - Created `MeaningfulPaintingArea` class to represent meaningful painting areas, containing properties like position, size, and opacity.
	   - Created `IMeaningfulPaintingAreaInvalidateHook` interface defining methods for invalidating meaningful painting areas.
	
	2. **Modified classes**:
	   - Enhanced multiple classes including `LynxView`, `LynxBaseUI`, and `UIBody` with methods for obtaining and processing meaningful painting areas.
	   - Overhauled rendering methods in `FlattenUIImage`, `UIImage`, `FlattenUIText`, and `UIText` classes to generate meaningful painting areas.
	
	3. **New methods implemented**:
	   - Added `invalidateMeaningfulPaintingArea` method across multiple classes to flag meaningful painting areas for recalculation and redrawing.
	
	NoLanding:develop,release/3.4
	
	(cherry picked from commit 2e02814b54839e9f146f0031f1eef153c6c0b6cf)

### 🛠️ Infra


- [Infra] Lock actions revision and optimize cache key calculation ([bc8140f](https://github.com/lynx-family/lynx/commit/bc8140f9fbeaca7124bd8230642f523e92ff9cef))  @coolkiid

	
	Lock the revision of lynx-infra/cache and lynx-infra/(up|down)load-artifact.


- [Infra][types] mark MetricTtiEntry as deprecated in TS ([ba3a4b5](https://github.com/lynx-family/lynx/commit/ba3a4b541f5f4e5a7eb9c2fb82638186a056eb94))  @Tamerlx

	
	Add x-deprecated field to MetricTtiEntry YAML definition and update TS generator
	to include deprecation notice in the generated interface. The metric is deprecated
	due to inaccuracies caused by long tasks.
	
	
	(cherry picked from commit c95590f452fb5e0b964b8a6f17fcc95cc7366057)


- [Infra] Optimize get-latest-tag logic in github workflow ([c99cd66](https://github.com/lynx-family/lynx/commit/c99cd66ed3cdb14fd509514f2c06deb105de0d56))  @Kingatnuaa0528

	
	Optimize the get-latest-tag logic in the GitHub workflow to prevent the latest-tag from retrieving the version number of the currently being released version during the release process.


- [Infra] Disable occassional failed test case. ([f690982](https://github.com/lynx-family/lynx/commit/f6909822a1e685907f5bf001fa7cb2a334b964ad))  @zsy-jason

	
	StopSetInterval test case fails occassionally, disable it.