Kotlin 1.3 で CoroutineScope

Kotlin 1.3 RC is Here: Migrate Your Coroutines! | Kotlin Blog

新しくこんなの出てます。


public interface CoroutineScope {

  /**
   * Returns `true` when this coroutine is still active (has not completed and was not cancelled yet).
   *
   * Check this property in long-running computation loops to support cancellation:
   * ```
   * while (isActive) {
   *   // do some computation
   * }
   * ```
   *
   * This property is a shortcut for `coroutineContext.isActive` in the scope when
   * [CoroutineScope] is available.
   * See [coroutineContext][kotlin.coroutines.experimental.coroutineContext],
   * [isActive][kotlinx.coroutines.experimental.isActive] and [Job.isActive].
   *
   * @suppress **Deprecated**: Deprecated in favor of top-level extension property
   */
  @Deprecated(level = DeprecationLevel.HIDDEN, message = "Deprecated in favor of top-level extension property")
  public val isActive: Boolean
    get() = coroutineContext[Job]?.isActive ?: true

  /**
   * Returns the context of this scope.
   */
  public val coroutineContext: CoroutineContext

}

新しいコルーチンのスコープです。

すべてのコルーチンビルダーは CoroutineScope の拡張となり、これを継承したコルーチンコンテキストは自動的にすべての要素にキャンセルを伝えることができます。

これを使って、アクティビティのライフサイクル周りを実装します。


class MyActivity : AppCompatActivity(), CoroutineScope {

  lateinit var job: Job

  override val coroutineContext: CoroutineContext
      get() = Dispatchers.Main + job


  override fun onCreate(savedInstanceState: Bundle?) {
    super.onCreate(savedInstanceState)
    job = Job()
  }


  override fun onDestroy() {
    super.onDestroy()

    // すべての子ジョブが destroy されたあと
    // 自動的にキャンセル
    job.cancel() 
  }


  // Activity が destroy されるか、このメソッド内で、例外が
  // 発生すると、すべてのネストしたコルーチンはキャンセルされる

  fun loadDataFromUI() = launch { // メインスレッドで起動

    val ioData = async(Dispatchers.IO) { // IOコンテキストで起動
      // ブロッキング I/O 処理
    }

    //  I/O の結果を wait
    val data = ioData.await()

    // メインスレッドで描画
    draw(data) 
  }
}

簡単な記述で、ネストしたコルーチンすべてを自動的にキャンセルしてくれるのです。

Kotlin 1.3 RC is Here: Migrate Your Coroutines! | Kotlin Blog

Using Kotlin Coroutines in your Android App


Gboard 日本語 12キー 左右のカーソルキーを使ってすばやく上下移動する方法

今まで、左右にしか動かなったカーソルキーが上下方向にジェスチャー(スワイプ)することで、縦方向にも移動できるようになっています。



英語キーボードのスペースキーのジェスチャー機能(左右のみ)に続いて、日本語12キーもすばやくカーソル移動できるようになりました。

まだまだ、この先の機能改善も期待できそうです。

Gboard - the Google Keyboard - Apps on Google Play


【Android Pie】スクリーンショット取得→編集 は「電源ボタン長押し」から

スクリーンショット取得の方法は、

「音量ダウン」+「電源ボタン」

ですよね。

この方法、2つの物理ボタンを同時に押すということで、音量が変化したり、狙ったタイミングで取得できないことありませんでした?

Android Pie では、「電源ボタンの長押し」からできるようになりました。

電源ボタン長押しで、画面右側に小さなメニュー

- 電源OFF
- 再起動
- スクリーンショット

ここで「スクリーンショット」を選択でその画面が取得され、通知バーにメッセージ。

「編集」を押すと、編集画面となり、

- 画像のクロップ
- 手書き線(カラー)
- 手書きマーカー(半透明カラー)
- 一つ 前に戻る/先に進む

と取得されたスクリーンショットに対して加工できます。



他のアプリを介さずに、スクリーンショット取得後、コメントや矢印などを記入して、そのままシェアすることができるようになります。

👉 【Android11】スクショ 
👉 【Android11】クイックタイルから「画面録画(スクリーンレコード)」が可能に 

Android 9 Pie 使ってみた
【Android Pie】ナビゲーションバー の ホームボタン を ピル型 にする方法
【Android Pie】Google Digital Wellbeing を使う
【Android Pie】Auto-rotate (自動回転) OFF のときの挙動
【Android Pie】使いやすくなった音量設定
【Android Pie】スクリーンショット取得→編集 は「電源ボタン長押し」から
【Android Pie】「通知」設定のシンプルな考え方
👉【公式 2018-05-07】Android Pie のバージョンシェア がやっと 10%超えている件