相关疑难解决方法(0)

为什么将removeCallbacks()与postDelayed()一起使用?

我试图通过浏览 Android Studio 中提供的全屏活动模板来了解其功能,特别是我们removeCallbacks()结合使用的一个特殊原因。postDelayed()在全屏活动模板中,当触摸屏幕时,它将在一定毫秒数后显示/隐藏状态栏和导航/系统栏,在此模板的情况下为 3000 毫秒。


private void hide() {
    // Hide UI first
    ActionBar actionBar = getSupportActionBar();
    if (actionBar != null) {
        actionBar.hide();
    }
    mControlsView.setVisibility(View.GONE);
    mVisible = false;

    // Schedule a runnable to remove the status and navigation bar after a delay
    mHideHandler.removeCallbacks(mShowPart2Runnable); // <------ Comment/uncomment
    mHideHandler.postDelayed(mHidePart2Runnable, UI_ANIMATION_DELAY);
}

@SuppressLint("InlinedApi")
private void show() {
    // Show the system bar
    mContentView.setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION);
    mVisible = true;

    // Schedule a runnable to display UI elements after a …
Run Code Online (Sandbox Code Playgroud)

java android handler runnable postdelayed

3
推荐指数
1
解决办法
3146
查看次数

未删除令牌类型 Int 或 Long 的 Android 处理程序回调 (*Kotlin)

我在 android 项目中执行了这段代码Kotlin,它将记录两条消息。如果我将其更改tokenChar,否则String它将仅打印一条消息,这是所需的行为。android 中的 java 项目中的相同用例可以正常工作。

    val handler = Handler()
    //val token1: Long = 1001L
    //val token2: Int = 121
    val token1: Long = 1001L
    val token2: Int = 1002

    handler.postAtTime(
        {
            Log.e("postAtTime 1", " printed 1 ")
            handler.removeCallbacksAndMessages(token2)
        },
        token1,
        SystemClock.uptimeMillis() + 2000
    )

    handler.postAtTime(
        {
            Log.e("postAtTime 2", " printed 2 ")
        },
        token2,
        SystemClock.uptimeMillis() + 4000
    )
Run Code Online (Sandbox Code Playgroud)

我的问题是,为什么在 Kotlin 中,对于 类型的标记IntLong处理程序不会删除回调?

编辑 如果我尝试使用注释值,它会起作用

android kotlin android-handler

2
推荐指数
1
解决办法
776
查看次数