ARTS打卡 - 2023-04-W1

70 阅读2分钟

Algorithm

返回倒数第 k 个节点

/**
 * Definition for singly-linked list.
 * public class ListNode {
 *     int val;
 *     ListNode next;
 *     ListNode(int x) { val = x; }
 * }
 */
class Solution {
    public int kthToLast(ListNode head, int k) {
        if (head == null || k < 1) {
            return head.val;
        }
        ListNode cur = head;
        while (cur != null) {
            k--;
            cur = cur.next;
        }
        if (k == 0) {
            return head.val;
        }
        if (k < 0) {
            cur = head;
            while (k != 0) {
                k++;
                cur = cur.next;
            }
        }
        return cur.val;
    }
}

Review

Migrating from LiveData to Kotlin’s Flow

Tip

repeatOnLifecycle:

repeatOnLifecycle 是一个 androidx.lifecycle.lifecycle-runtime-ktx 库中的函数,它提供了一个异步重复执行的机制,并可在特定生命周期下自动停止。该函数通常用于与 Kotlin 协程一起使用,以在特定的生命周期内执行异步任务,并在生命周期结束时自动结束该任务。

以下是使用 repeatOnLifecycle 函数的基本示例:

lifecycleScope.launch {
    lifecycle.repeatOnLifecycle(Lifecycle.State.STARTED) {
        // 在 STARTED 状态下执行异步任务
        // 这个块是可取消的,所以异步任务也应该是可取消的
    }
}

在上面的示例中,我们在 lifecycleScope 协程作用域中启动了一个协程,然后使用 repeatOnLifecycle 函数来指定需要重复执行的代码块,并在指定的生命周期状态下执行代码块。

使用 repeatOnLifecycle 函数时,需要明确指定需要重复执行的生命周期状态,这可以防止不必要的资源浪费和内存泄漏。在大多数情况下,我们应该在 STARTED 状态下执行异步任务,以确保该任务的生命周期与宿主组件的生命周期相匹配。

需要注意的是,使用 repeatOnLifecycle 函数时,异步任务也应该是可取消的,以便在宿主组件的生命周期结束时,能够自动取消任务。否则,可能会出现内存泄漏或其他不希望出现的情况。

总之,repeatOnLifecycle 函数为我们提供了一种简单可靠的方式来管理异步任务的生命周期,避免了手动管理生命周期带来的繁琐和易错。

Share

Flow