Androidアプリのアニメーションは必要?

なんとなくスマホイライラの原因の一つではないか、と思う。

More users like to turn off animations than you think.
予想以上にアニメーションOFFは好かれている。

Is it reasonable to assume your app's users have their developer options turned off? : androiddev

そんなあなたはOFFにしましょう。

スッキリしてサクサクします。

「開発者向けオプション(デベロッパーモード)」の有効化が必要ですが、開発者でない人も便利に利用できます。

android デベロッパーモード - Google 検索

有効化したら、その中で3つのアニメーションをOFFにするだけです。

ね、スッキリするでしょう?

どうせ待つなら滑らかアニメーションがあったほうがいいか。


スマホのバッテリーを交換する

数年後、ほぼバッテリーが膨らんできたり、充電の雰囲気がおかしくなりますよね。

普通に使っている限り、最初に壊れるのはバッテリー周りからではないでしょうか。

自分で交換したくなりますよね、カメラやCPUなど他は全く問題ないのですから。

ベンダーやキャリアのOSのアップデートが終了したとしても、Lineage で更新していきましょう。

LineageOS – LineageOS Android Distribution

Android 端末は、いろんなことができるパソコンレベルの能力を持ったデバイスなのですから。

道具

4-5台交換してきましたが、以下は必須と思われます。

- 精密機器用のドライバーのセット
- プラスチックのヘラ

スマホをばらすには六角の形状のドライバーが必要。



あと、内部の固定に両面テープが使われてること多いですので、基盤など傷つけない薄いヘラが必要になります。

数枚あると、差し込んだままゆっくり剥がしていくことができます。

あと、私はこれが欲しい気はしています。




iOpenerの利用方法 - iFixit Repair Guide


なくてもいまのところはいけてますが欲しい小道具ではあります。

動画を見る

新端末のローンチと同時に不必要なバッテリー交換だけでなく、リペア系の動画をアップする人や企業はたくさんいます。

手順だけでなく、自分の手先の器用さや必要工具の有無など間違いなく見て置いたほうがいいでしょう。


Android Repair - iFixit

Battery Replacement - Android Forums at AndroidCentral.com

バッテリー交換のために、分解するとこ、しないとこをはっきり見極めておく必要があります。

私は、配線を引きちぎってしまい 非接触充電 (Qiなど) が利用できななくなったことがあります。

バッテリーを探す

購入できるその端末のバッテリーを探します。

Cell Phone Replacement Batteries | Amazon.com

Amazon.co.uk: replace - Batteries / Accessories: Electronics & Photo

海外のサイトでは、安く購入できますが、基本、バッテリーの海外からの輸入は制限されている雰囲気です。

ヤフオク、メルカリ、アマゾン日本 などがいいでしょう。
大体、2000円くらいでしょうか。



初回は、道具付のセットがいいかもしれません。

作業する

動画や手順サイトをみながら、思い切って行きましょう、どっちみち捨てる運命だった端末です。

ネジ山を潰したときのしょんぼり感は格別でしたが、次の動画をヒントにゴムの代わりのセロテープで乗り切ることができました。



そんな、Nexus6 のバッテリー交換の風景です。



まとめ

実際は、古い端末を活かしたとしても、いまどきのアプリの負荷に能力が耐えられず、イライラが爆発するのは、Android OS 5.x をベースとした Amazon Kindle HD のモッサリ動作を経験した方なら想像できるでしょう。

しかし、貧乏性の私たちは、「使わないが使える物」を捨てることができません。


最小限 の Kotlin を最短で学ぶ

最小限 の Kotlin を最短で学ぶ

シンプルな記事あったので。

Learn Kotlin for Android in One Day – Mayur Rokade – Medium

1. 変数

変数は「var」。


var username: String = "some user name"

定数は「val」。Java の final と等価。


val API_DELAY_CONSTANT: Int = 100

null で初期化するには「?」。 null を利用可能にします。


var myString: String? = null

static な定数には「companion object」。


class Animal {

    companion object {
        const val DEFAULT_NUM_OF_EYES = 2
    }
}

animal.numOfEyes = Animal.DEFAULT_NUM_OF_EYES

遅れて初期化するには「lateinit」。


lateinit var user: User
lateinit var items: List<String>

2. 関数

これは、public。Int を返します。


fun getNumber(): Int {
    return 1
}

private で引数を渡す場合。


private fun getStringLength(str1: String, str2: String): Int {
    return str1.length + str2.length
}

static 関数。


class MyStringUtil {

    companion object {
        fun getOddLengthString(str: String): String? {
            if (str.length % 2 == 0) return null

            return str
        }
    }
}
var str: String = MyStringUtil.getOddLengthString("hey")

「?」を使って、null を返すことをコンパイラに伝えています。

3. ループ と when

コレクションである items に「in」で。


var items: List<String> = ArrayList<String>()

for (item in items) {
    // do something with item
}

インデックスにアクセスすることもできる。


for (index in items.indices) {
    // access items using index
    // items.get(index)
}

Java の switch は、Kotlin では「when」。


// A cool example of when statement
fun describe(obj: Any): String? {
    var res: String? = null

    when (obj) {
        1 -> { res = "One" }         // if obj == 1
        "Hello" -> res ="Greeting"  // if obj == "Hello"
        is Long -> "Long"            // if obj is of type Long
        !is String -> "Not string"   // if obj is not of type String
        else -> {
            // execute this block of code
        }
    }

    return res
}

4. Null 安全

Java で NPE を避ける場合。if で。


if (person != null && person.department != null) {
    person.department.head = managersPool.getManager()
}

Kotlin では「?」を使って、if を省くことができる。chain可能。


person?.department?.head = managersPool.getManager()

null の場合を処理したいときは「?:」を使う。


var name = person?.name ?: throw InvalidDataException("Person cannot be null.")

5. クラス

「open」で継承可能。なければ, Java の final class と同じ。


open class Animal {
    // This class is open and
    // can be inherited
}

class Dog : Animal() {  // Notice the paranthesis
    // Class dog is final and
    // can't be inherited
}

// Compiler throws error
class Labrador : Dog {

}

6. シングルトン

「object」を使う。


object Singleton {
    var name: String = "singleton object"

    fun printName() {
        println(name)
    }
}

// later in the code
Singleton.name
Singleton.printName()

7. インターフェース

インターフェースの継承は直感的に。


interface Named {
    fun bar()
}

interface Person : Named { // Person inherits Named
    fun foo()
}

class Employee() : Person {
    override fun bar() {
        // do something
    }

    override fun foo() {
        // do something
    }
}

関数に渡す場合は少し違う。


// A function that accepts and interface as a parameter
private fun setOnClickListener(listener: View.OnClickListener) {
    // do something
}

// Passing an interface to the function
setOnClickListener(object : View.OnClickListener{
    override fun onClick(view: View?) {
        // do something
    }
})

8. 型チェックとキャスト

「is」や「!is」を使う。


if (obj is String) {
    print(obj.length)
}

if (obj !is String) {
    print("Not a String")
}

「as?」を使って例外を避けてキャスト可能。失敗時には null を返す。


val x: String? = y as? String

9. 例外

Java とほぼ同じ。


throw Exception("Hi There!")

try {
    // some code
}
catch (e: SomeException) {
    // handler
}
finally {
    // optional finally block
}

まとめ

重要な最小限の部分からきちんと学んでいくこと大事。

- Kotlin で FizzBuzz
- 「Fragment を利用するか、しないか」という話