应用切换深色模式时发生闪退
=============

#### 问题现象

切换为深色模式时，应用发生闪退。

#### 背景知识

*   JsCrash异常根据不同的异常场景，在Reason字段进行了分类，分为Error、TypeError、SyntaxError、ReferenceError、RangeError等错误类型。参考文档[JS Crash（进程崩溃）检测](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/jscrash-guidelines)。
*   JsCrash日志规格说明可以参考[日志规格](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/jscrash-guidelines#日志规格)。
*   ForEach提供了一个名为keyGenerator的参数，这是一个函数，开发者可以通过它自定义键值的生成规则。如果开发者没有定义keyGenerator函数，则ArkUI框架会使用默认的键值生成函数，即(item: Object, index: number) => { return index + '\_\_' + JSON.stringify(item);}。参考文档[键值生成规则](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-rendering-control-foreach#键值生成规则)。

#### 问题定位

1.  确认闪退类型，闪退问题首先排查是否出现JsCrash或者CppCrash，查看faultlogger目录，是否生成了形如jscrash-应用包名或者cppcrash-应用包名的故障日志。
2.  确认闪退原因。
    
    Error name:Error
    Error message:@Component 'BottomBarView'\[41\]: ForEach id 104: use of default id generator function not possible on provided data structure. Need to specify id generator function (ForEach 3rd parameter). Application Error!
    Stacktrace:
    at idGenFunc (/usr1/hmos\_for\_system/src/increment/sourcecode/foundation/arkui/ace\_engine/frameworks/bridge/declarative\_frontend/engine/stateMgmt.js:4341:1)
    at anonymous (/usr1/hmos\_for\_system/src/increment/sourcecode/foundation/arkui/ace\_engine/frameworks/bridge/declarative\_frontend/engine/stateMgmt.js:4353:1)
    at forEachUpdateFunction (/usr1/hmos\_for\_system/src/increment/sourcecode/foundation/arkui/ace\_engine/frameworks/bridge/declarative\_frontend/engine/stateMgmt.js:4352:1)
    at anonymous (features/home/src/main/ets/bottombar/BottomBarView.ets:41:40)
    at updateFunc (/usr1/hmos\_for\_system/src/increment/sourcecode/foundation/arkui/ace\_engine/frameworks/bridge/declarative\_frontend/engine/stateMgmt
    
    从故障日志中可以获取到故障原因和异常信息。
    
    *   故障原因是Error。
    *   异常信息是@Component XXX:ForEach id XXX: use of default id generator function not possible on provided data structure. Need to specify id generator function (ForEach 3rd parameter). Application Error!
        
        Error name:Error
        Error message:@Component XXXX: ForEach id 104: use of default id generator function not possible on provided data structure. Need to specify id generator function (ForEach 3rd parameter). Application Error!
        Stacktrace:
        at idGenFunc (/usr1/hmos\_for\_system/src/increment/sourcecode/foundation/arkui/ace\_engine/frameworks/bridge/declarative\_frontend/engine/stateMgmt.js:4341:1)
        at anonymous (/usr1/hmos\_for\_system/src/increment/sourcecode/foundation/arkui/ace\_engine/frameworks/bridge/declarative\_frontend/engine/stateMgmt.js:4353:1)
        
    *   从异常信息可以看出默认的键值生成函数不能处理提供的数据结构，需要自定义键值生成函数。

#### 分析结论

提供的数据结构不能被默认的键值生成函数处理。

#### 修改建议

确保提供的数据结构能被默认的键值生成函数处理或者自定义键值生成函数，参考文档[使用场景](https://developer.huawei.com/consumer/cn/doc/harmonyos-guides/arkts-rendering-control-foreach#使用场景)。