Kotlin で書きたい「正しいシングルトン(Singleton)」

汎用性のある使えるシングルトン、

どのように書いてますか?


class Singleton private constructor() {

  // getInstance() ???

}

ここから、どんな getInstance() を?

いくつか。


fun getInstance(): Singleton {
  synchronized(this) {
    if(INSTANCE == null){
      INSTANCE = Singleton()
    }
    return INSTANCE!!
  }
}


companion object {
  private var INSTANCE: Singleton ? = null
  fun getInstance(): Singleton {
    if(INSTANCE == null){
      INSTANCE = Singleton()
    }
    return INSTANCE!!
  }
}


companion object {
  val INSTANCE = Singleton()
  fun  getInstance(): Singleton {
    return INSTANCE
  }
}


@Volatile private var INSTANCE: Singleton ? = null
fun getInstance(): Singleton {
  if(INSTANCE == null){
    synchronized(this) {
      INSTANCE = Singleton()
    }
  }
  return INSTANCE!!
}


companion object {
  @Volatile private var INSTANCE: Singleton ? = null
  fun getInstance(): Singleton {
    return INSTANCE?: synchronized(this){
      Singleton().also {
        INSTANCE = it
      }
    }
  }
}

Singleton Pattern — What you might be doing wrong! – Hacker Noon

正解?

Googleの人はこう書いてます。


class CheeseRepository(
  private val api: CheeseApi,
  private val db: CheeseDatabase,
  private val executor: Executor
) {

  companion object {
    private const val PAGE_SIZE = 30

    private var instance: CheeseRepository? = null

    fun getInstance(context: Context) = instance ?: synchronized(this) {
      instance ?: CheeseRepository(
          CheeseApi(),
          Room.databaseBuilder(context, CheeseDatabase::class.java, "cheese").build(),
          Executors.newFixedThreadPool(4)
      ).also { instance = it }
    }
  }

CheesePage/CheeseRepository.kt at master · yaraki/CheesePage

あと、Dagger の @Singleton もこのスタイルに変換されますので安心です。覚えておきたい記述です。

まとめ

なんだか気持ちが悪くても、
なかなか正解が見つけられないこと多くね? 最近。


Android バージョンシェア 2019-03-31

ふと、

Android Studio 備え付けのツールで

確認してみましたよ、

「バージョンシェア」。

明らかに、古すぎですね。

仕方なくブラウザを開き、

Distribution dashboard  |  Android Developers へ。

半年近く前のやつ。

古すぎ。

 

調べる

なので、そんなサイトを探す。

Mobile & Tablet Android Version Market Share Worldwide | StatCounter Global Stats

Android OS version market share over time | AppBrain

各凡例の分け方が違うが、

数字や傾向は似ているので、

簡単に平均をとっちゃう。

 

結果

日本のような先進国では、

これより上位バージョン寄りであることは、

Playコンソールの数字からもよく分かる。

👉Android OS バージョン確認方法 (platform versions)




👉【公式 2018-05-07】Android Pie のバージョンシェア がやっと 10%超えている件


Gboard でユーザー辞書が変換候補に反映されない場合

端末のユーザー辞書(単語リスト)に文字を登録したのに、

Gboard の変換候補に全く反映されない場合。

以下のどちらかでいける。

A. Gboardの設定 から「学習した単語を削除」


「あa」を長押し

↓

「歯車」をタップ

↓

単語リスト

↓

学習した単語を削除

B. アプリ情報 から「ストレージを消去(キャッシュを削除)」


設定

↓

アプリと通知

↓

Gboard

↓

ストレージ

↓

ストレージを消去
(キャッシュを削除)

まとめ?



「ユーザー辞書」が反映されない話が多いので調べてみたらこんな。

どれくらい「学習」してるのか、

何を保存してるのか、

何のために、と

見えるようにしておいてくれたらわかりやすいのにな。

と思ったり。



👉 顔文字パック 辞書ツール - Google Play のアプリ
👉 顔文字/絵文字辞書 単語リスト - Google Play のアプリ 

👉 「単語リスト(ユーザー辞書)」が変換候補に表示されない場合 


【Android Q】 端末画面動画 (screenrecord) が簡単に録画録音できるのよ、アプリ不要!

これまでは、「スクリーンレコーダー」のようなアプリを別にインストールしていましたが不要となりました。

「電源ボタン長押し」

から動画キャプできます。

今は、まだ、ベータ感満載です。

以下で、まず「有効化」しておきます。

[設定]

↓

[システム]

↓

[詳細設定]

↓

[開発者向けオプション]

↓

[機能フラグ]

↓

[settings_screenrecord_long_press]

 

録画手順



1. 電源ボタン長押し。

2. スクリーンショットボタン長押しで録画開始。

3. 通知バーから録画停止。

 

↑でQ上で実際に録画した画面動画



通知バーからのポップアップは邪魔ぢゃんねえ?

絵文字 (えもじ) パック - Google Play のアプリ

追記:2020-01-17

Android 10 の公式OTAでも使えるようになってます。



端末画面からは有効化することができませんが、

adb経由で有効化できます。


adb shell settings put global settings_screenrecord_long_press true

画像の端末は Pixel3 です。

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

👉 【Android10】隠し機能の「画面録画機能(screenrecord)」を使うべし 


Related Categories :  Android・Google・・


【Android Q】Android Q Beta(ベータ)版 をインストールする (動画有り)

以下から参加すると、これまでの安定版のOTA更新と同じようにインストールできるようになります。

Android ベータ プログラム

まずは、 Beta1 からです。

何も考えずに進みます。



あらかじめ既知の問題等リリースノート関係は確認しておきましょう。

componentid:190602 status:open - Issue Tracker

Android Q Beta 1 now available! : android_beta

Support and Release Notes  |  Android Developers

まとめ?

安定版に戻すことは可能だと書いてます。

ベータ プログラムを終了する
このプログラムはいつでも登録の解除が可能です。必要に応じて、動作が安定している正式版の Android に戻すことができます。お使いのデバイスでベータ版の Android の実行中に登録を解除すると、デバイス上のユーザーデータがすべて消去されます。プログラムの終了まで登録しておくと、プログラムの終了時に、動作が安定している正式版の Q へのアップデートが配信されます。この場合、デバイスのデータは消去されません。

そんなにきれいに戻れるのかな?

本当かな?

(つづく...)