SlideShare a Scribd company logo
1 of 40
Download to read offline
情報理工Android勉強会
第二回
-非同期処理-
坂本大将
流れ
• 非同期処理って?
• なんで非同期処理が必要なの?
• 実際につかってみよう∼AsyncTask∼
• いろいろな非同期処理
• おまけ
非同期処理って?
ざっくり
特定の処理を別の処理を止めずに行うこと!
たとえば・・・
ゲームしながらサーバと通信
なんで必要なの?
百聞は一見にしかず・・・
∼デモ∼
演習のDBアプリに100件データ挿入
!
起動!
手順
1. https://www.dropbox.com/sh/
9geo10r0rh9rma2/n8f4GPflSy を開く。
2.  上から2つのプロジェクトをインポート
3. SavingdataSample2を実行後Testを実行
4. 再びSavingdataSample2を実行
(́・ω:;.:…
なんでこうなるの?
Androidアプリはシングルスレッドモデル
→基本一つのことしかできません!
結果・・・
時間のかかる処理がはじまると
しばらく他の処理が動かない。。。。
だから非同期処理は必要!
実際に使ってみよう!
Threadを
つかうんですか?><
自分では使いません!
なんで、、、?
ワーカースレッドからUIに直接干渉できない!
!
!
GUIで想定される非同期処理の実現が
結構面倒くさい・・・
AsyncTask
を使おう!
AsyncTask
簡単に非同期処理を実現するAPI。
継承して使います!
AsyncTask
!
	 class DBTask extends AsyncTask<Void, Void, Void> {	
	 	 // ここはUIスレッドで動きます	
	 	 @Override	
	 	 protected void onPreExecute() {	
	 	 	 super.onPreExecute();	
	 	 	 // ユーザを待たせたいときにダイアログを出すなどの処理	
	 	 }	
!
	 	 // ここはワーカースレッドで動きます	
	 	 @Override	
	 	 protected Void doInBackground(Void... params) {	
	 	 	 //非同期で行いたい処理。DB登録、取得など。	
	 	 	 return null;	
	 	 }	
!
	 	 // ここはUIスレッドで動きます	
	 	 @Override	
	 	 protected void onPostExecute(Void result) {	
	 	 	 //非同期処理が終わった後に実行したいUI操作。	
	 	 	 //通信が終わったことをユーザに通知させる処理や、ダイアログのクローズなど	
	 	 	 super.onPostExecute(result);	
	 	 }	
	 }
演習1
演習
さっきの演習で創ったアプリの
DB処理をAsyncTaskでかいてみよー
AsyncTaskでなんでも
できるじゃん!
ごめん、、、
できない、、、、
なにが問題?
Activityがインスタンスを保持
→アプリケーションが全面にいないといけない
それで何が困るの?
音楽アプリで
音楽ききながら
ブラウジングしたい!
この場合、音楽アプリで音楽再生を
非同期実行していたとします
こうなる!
え、ブラウザ立ち上げたら
音楽消えた・・・
これじゃ意味ないよ・・・
こうなる
インターネット開ぃタラぅちのEX○LE消ェた。
ぃみわかんなぃ…
☆1つです。
どうしよう・・・
Serviceを使おう!!!
Serviceって・・・?
バックグラウンド処理のためのコンポーネント
 →画面を持たずに実行できる
→実行プロセスのメインスレッド上で動く
 →プロセス指定して実行できる
第一回で
やったよね・・・
バックグラウンド処理
(Service)
サーバーから受信
バックグラウンドで
受信処理
バックグラウンド処理
(Service)
表示!!
これです!
Serviceは二回目にしては重い内容なので、
• 同じアプリの処理を別プロセスで起動
• 画面を起こさずに処理を行いたい
こういう時に使うとだけ覚えておけば今日はOK
AsyncTaskのさらなる問題
• Activityから呼び出されるため、画面が背面に
回ったりすると途中で処理が中断される
→処理時間の長いものには向かない!
何を使えば・・・?
ExecutorService
private void postExecute() throws InterruptedException{	
	 	 Runnable task = new Runnable() {	
	 	 	 @Override	
	 	 	 public void run() {	
	 	 	 	 //非同期で実行したい処理	
	 	 	 }	
	 	 };	
	 	 	
	 	 //実行	
	 	 exe.execute(task);	
	 	 	
	 	 //これ以上タスクを動かすのを禁止する	
	 	 exe.shutdown();	
	 	 	
	 	 //5秒待っても終了していなかった場合強制終了させる	
	 	 if(!exe.awaitTermination(5000, TimeUnit.MICROSECONDS))	
	 	 	 exe.shutdownNow();	
	 	 	
}
難しいのでAsyncTask
だけ覚えて帰って・・・
重い部分は次回
ごめんなさい。。。
(完)

More Related Content

Similar to Android勉強会第二回-非同期処理-

Androidの非同期
Androidの非同期Androidの非同期
Androidの非同期risa buto
 
12.06.16 日本橋勉強会資料 公開用
12.06.16 日本橋勉強会資料 公開用12.06.16 日本橋勉強会資料 公開用
12.06.16 日本橋勉強会資料 公開用Miwa Iwatsuki
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Atsushi Harada
 
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)Kenichi Kambara
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とToru Takahashi
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介Mori Shingo
 
第2回 Android勉強会
第2回 Android勉強会第2回 Android勉強会
第2回 Android勉強会fujikunn
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナーTakahiro Iwase
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだNarami Kiyokura
 
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)Shinya Nakajima
 
モノづくりを楽しもう! ~ このデバイスとクラウドでできること
モノづくりを楽しもう! ~ このデバイスとクラウドでできることモノづくりを楽しもう! ~ このデバイスとクラウドでできること
モノづくりを楽しもう! ~ このデバイスとクラウドでできることKazumi IWANAGA
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎ken_kitahara
 
Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事Hirokazu Tokuno
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト健一 辰濱
 
大規模並列実験を支えるクラウドサービスと基盤技術
大規模並列実験を支えるクラウドサービスと基盤技術大規模並列実験を支えるクラウドサービスと基盤技術
大規模並列実験を支えるクラウドサービスと基盤技術RyuichiKanoh
 
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っているやはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている今城 善矩
 

Similar to Android勉強会第二回-非同期処理- (20)

Stac2014 石川
Stac2014 石川Stac2014 石川
Stac2014 石川
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 
地獄Spec
地獄Spec地獄Spec
地獄Spec
 
Androidの非同期
Androidの非同期Androidの非同期
Androidの非同期
 
12.06.16 日本橋勉強会資料 公開用
12.06.16 日本橋勉強会資料 公開用12.06.16 日本橋勉強会資料 公開用
12.06.16 日本橋勉強会資料 公開用
 
Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~Titanium Mobile ~本当にあったこわい話~
Titanium Mobile ~本当にあったこわい話~
 
Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)Androidリリース作業の効率化(2)
Androidリリース作業の効率化(2)
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
EmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤とEmbulkとDigdagとデータ分析基盤と
EmbulkとDigdagとデータ分析基盤と
 
福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介福井スマートフォンハッカソン Titanium Mobileの紹介
福井スマートフォンハッカソン Titanium Mobileの紹介
 
第2回 Android勉強会
第2回 Android勉強会第2回 Android勉強会
第2回 Android勉強会
 
20120405 setsunaセミナー
20120405 setsunaセミナー20120405 setsunaセミナー
20120405 setsunaセミナー
 
よろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだよろしい、ならばMicro-ORMだ
よろしい、ならばMicro-ORMだ
 
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
Visual Studio App Centerを公式サンプルアプリから学ぼうiOS(swift),Android(java)
 
モノづくりを楽しもう! ~ このデバイスとクラウドでできること
モノづくりを楽しもう! ~ このデバイスとクラウドでできることモノづくりを楽しもう! ~ このデバイスとクラウドでできること
モノづくりを楽しもう! ~ このデバイスとクラウドでできること
 
FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎FridaによるAndroidアプリの動的解析とフッキングの基礎
FridaによるAndroidアプリの動的解析とフッキングの基礎
 
Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事Amazon DynamoDB 初心者が理解した事
Amazon DynamoDB 初心者が理解した事
 
Device Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テストDevice Farm を使ったスマホアプリの自動テスト
Device Farm を使ったスマホアプリの自動テスト
 
大規模並列実験を支えるクラウドサービスと基盤技術
大規模並列実験を支えるクラウドサービスと基盤技術大規模並列実験を支えるクラウドサービスと基盤技術
大規模並列実験を支えるクラウドサービスと基盤技術
 
やはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っているやはりお前らのCore Dataの使い方も間違っている
やはりお前らのCore Dataの使い方も間違っている
 

Android勉強会第二回-非同期処理-