Pages - Menu

2016-08-27

[Android] ThreadとHandler

Android開発をしているうちにつまづくのはThreadとHandlerであろう。
基本とAndroidにおける扱いをまとめる。

Thread

基本的にコードに書いた一連の処理は、1つのThread内で一本の流れとして逐次的に処理される。並列的に処理をしたい場合や、時間の掛かる処理を行いたい場合などは別のThreadを立てて実行する。

Androidでは、ネットワークアクセス等、時間の掛かる処理はActivity等を実行しているUIThreadでは許可されていないことに注意する。

Threadは2通りの方法でつくることができる。

new Threadする

Thread thread = new Thread(new Runnable( /* ★ */ ){});

classをimplements Runnableする

class hoge implements Runnbale { /* ★ */}

いずれの場合も、上の★の中でrun()をOverrideして、実行する処理を記載する。
また、Threadを実行には、Threadのstart()メソッドを呼び出す。

Handler

HandlerはThread間の通信を可能にする。postメソッドを用いて、Handlerのインスタンスを作成したThreadに対してアクセスする。また、Handlerの引数にLooperを用いて、任意のスレッドにアクセスする使い方もできる。

Androidでは、UIThread以外からUI部品にアクセスすることができない。そこで、別ThreadからUIThreadに対してHandlerを用いてアクセスする。

Handler guiThreadHandler = new Handler();
new Thread = new Thread( new Runnable(){
    guiThreadHandler.post(new Runnable(){
        @Override
        public void run(){
            //処理
        }
    }
 }).start(); 

参考

2016-08-16

実機で開発するAndroidアプリ

Android Studioを使用してAndroidアプリ開発環境を設定する。
なお、今回はHDD容量も少なく、RAMもあまり積んでいないモバイルPC向けに、実機を用いた最小限の構成を目指す。

設定概要

この設定では、実機にて実行/デバッグを行い、ファイスサイズが大きく、また実行に時間が掛かるAndroid VMは使用しない。

Android Studioのインストール

Android Studioのページから最新のインストーラをダウンロードしてインストール。
インストール時には「カスタム」を選択し、Android Virtual Deviceのチェックを外す。
JDKは最新のものをインストールして、JAVA_HOMEにインストールパスを設定しておくこと。

SDKの設定

Tools>Android>SDK Managerから「Launch Standalone SDK Manager」を開く。
以下をインストールする。

  • 実機と一致するAPIバージョンのSDK Platformを選択しインストールする。
    (Android 4.4であれば、「Android 4.4.2 (API19)」を選択)
  • Google USB Driver

実機の設定

設定>端末情報>ビルド番号 を連打して開発者向けオプションを表示する。
開発者向けオプションで「USBデバッグ」を有効にする。

実機での実行

実行/Runで「Connected Device」で実機を選択する。

トラブルシューティング

決まってこういうものは一発ではうまく行かないため、いろいろ試行錯誤したときのメモ。

Connected Deviceに端末が表示されない(端末が認識されない)

正しいドライバがインストールされていないことが問題。
User以下隠しフォルダのAppData\Local\Android\sdk\extras\google\usb_driverのandroid_winusb.infの中の[Google,NTx86]と[Google.NTamd64]の2箇所に追記。
追記内容は以下。
1行目にコメントアウト(;から開始)でデバイス名
2行目に%SingleAdbInterface% 実機のVIDとPIDを設定(デバイスマネージャで確認)
3行目に%CompositeAdbInterface% 実機のVIDとPIDを設定、末尾は他と同様(&MI_01等)
実機のドライバのインストール(更新)で、上記パスをドライバの場所に指定。

コンパイルは成功するが実行時にエラー

大抵の場合はコンパイルバージョン、ビルドツールバージョンの設定間違い。
プロジェクト右クリック>「Open Module Settings」から以下の項目を変更してみて、適切な設定を探す。
・Complie Sdk Version …最新のGoogle APIが良い?「Google APIs(API23)」を設定。
・Build Tools Version …バージョンによって挙動が異なる?23.0.3を設定。
・Min Sdk Version …任意に設定。