提示框无法弹出
=======

#### 问题现象

功能运行成功后，本应弹出运行成功的提示框，然而没有弹出提示框。

#### 背景知识

*   [promptAction.showToast](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/js-apis-promptaction#promptactionshowtoastdeprecated)：创建并显示文本提示框。从API version 18开始废弃，且直接使用showToast可能导致UI上下文不明确的问题。
*   UI上下文不明确是指调用ArkUI全局接口时，调用点无法明确指定UI实例的问题。

#### 问题定位

1.  功能运行成功后，输出如下日志，从第6、7行日志可知因为生命周期异常，提示框创建失败。
    
    C03926/com.example/AceTheme               W     \[(1000000:1000000:scope)\] style -1 not contains toast\_pattern!
    C03903/com.example/AceSubWindow           I     \[(1000000:1000000:scope)\] show toast, window parent id is 1000000
    C03903/com.example/AceSubWindow           I     \[(-1:100000:singleton)\] Toast posX: 0, posY: 0, width: 3120, height: 2080, density: 1.900000
    C04200/com.example/WindowSceneSessionImpl I     (139)WindowSceneSessionImpl: \[WMSCom\] Constructor ARK\_APP\_SUBWINDOW\_TOAST\_DIALOG\_0
    C0420A/com.example/WMSLife                I     \[\] Create(560): Window Create name:ARK\_APP\_SUBWINDOW\_TOAST\_DIALOG\_0, state:0, mode:1
    C0420A/com.example/WMSLife                I     \[\] CreateAndConnectSpecificSession(324): create specific failed, session is nullptr, name: ARK\_APP\_SUBWINDOW\_TOAST\_DIALOG\_0
    C0420A/com.example/WMSLife                I     \[\] RecordLifeCycleExceptionEvent(509): window life cycle exception: life cycle is abnormal: window\_name: ARK\_APP\_SUBWINDOW\_TOAST\_DIALOG\_0, id:0, event: CREATE, errCode: 1001;
    C04200/com.example/WindowSceneSessionImpl I     (144)~WindowSceneSessionImpl: \[WMSCom\] Destructor 0, ARK\_APP\_SUBWINDOW\_TOAST\_DIALOG\_0
    C01406/com.example/OHOS::RS               I     RSSurfaceNode::~RSSurfaceNode, Node: 108353434943740, Name: ARK\_APP\_SUBWINDOW\_TOAST\_DIALOG\_0
    C03903/com.example/AceSubWindow           W     \[(-1:100000:singleton)\] init toast dialog window failed
    C03903/com.example/AceSubWindow           W     \[(1000000:1000000:scope)\] can not find systemTopMost window when clear system toast
    
2.  排查提示框创建逻辑，发现是在异步方法中用promptAction.showToast创建的提示框。

#### 分析结论

在异步方法中用promptAction.showToast创建提示框会出现UI上下文不明确的情况。

#### 修改建议

使用[UIContext](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-uicontext-uicontext)中的[getPromptAction](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-uicontext-uicontext#getpromptaction)获取PromptAction实例，再通过此实例调用替代方法[showToast](https://developer.huawei.com/consumer/cn/doc/harmonyos-references/arkts-apis-uicontext-promptaction#showtoast)。