O slideshow foi denunciado.
Utilizamos seu perfil e dados de atividades no LinkedIn para personalizar e exibir anúncios mais relevantes. Altere suas preferências de anúncios quando desejar.
情報理工Android勉強会
第二回
-非同期処理-
坂本大将
流れ
• 非同期処理って?
• なんで非同期処理が必要なの?
• 実際につかってみよう∼AsyncTask∼
• いろいろな非同期処理
• おまけ
非同期処理って?
ざっくり
特定の処理を別の処理を止めずに行うこと!
たとえば・・・
ゲームしながらサーバと通信
なんで必要なの?
百聞は一見にしかず・・・
∼デモ∼
演習のDBアプリに100件データ挿入
!
起動!
手順
1. https://www.dropbox.com/sh/
9geo10r0rh9rma2/n8f4GPflSy を開く。
2.  上から2つのプロジェクトをインポート
3. SavingdataSample2を実行後Testを実行
4....
(́・ω:;.:…
なんでこうなるの?
Androidアプリはシングルスレッドモデル
→基本一つのことしかできません!
結果・・・
時間のかかる処理がはじまると
しばらく他の処理が動かない。。。。
だから非同期処理は必要!
実際に使ってみよう!
Threadを
つかうんですか?><
自分では使いません!
なんで、、、?
ワーカースレッドからUIに直接干渉できない!
!
!
GUIで想定される非同期処理の実現が
結構面倒くさい・・・
AsyncTask
を使おう!
AsyncTask
簡単に非同期処理を実現するAPI。
継承して使います!
AsyncTask
!
	 class DBTask extends AsyncTask<Void, Void, Void> {	
	 	 // ここはUIスレッドで動きます	
	 	 @Override	
	 	 protected void...
演習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() {	
	...
難しいのでAsyncTask
だけ覚えて帰って・・・
重い部分は次回
ごめんなさい。。。
(完)
Próximos SlideShares
Carregando em…5
×
Próximos SlideShares
AsyncTask アンチパターン
Avançar
Transfira para ler offline e ver em ecrã inteiro.

2

Compartilhar

Baixar para ler offline

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

Baixar para ler offline

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

  1. 1. 情報理工Android勉強会 第二回 -非同期処理- 坂本大将
  2. 2. 流れ • 非同期処理って? • なんで非同期処理が必要なの? • 実際につかってみよう∼AsyncTask∼ • いろいろな非同期処理 • おまけ
  3. 3. 非同期処理って?
  4. 4. ざっくり 特定の処理を別の処理を止めずに行うこと!
  5. 5. たとえば・・・ ゲームしながらサーバと通信
  6. 6. なんで必要なの?
  7. 7. 百聞は一見にしかず・・・
  8. 8. ∼デモ∼ 演習のDBアプリに100件データ挿入 ! 起動!
  9. 9. 手順 1. https://www.dropbox.com/sh/ 9geo10r0rh9rma2/n8f4GPflSy を開く。 2.  上から2つのプロジェクトをインポート 3. SavingdataSample2を実行後Testを実行 4. 再びSavingdataSample2を実行
  10. 10. (́・ω:;.:…
  11. 11. なんでこうなるの? Androidアプリはシングルスレッドモデル →基本一つのことしかできません!
  12. 12. 結果・・・ 時間のかかる処理がはじまると しばらく他の処理が動かない。。。。
  13. 13. だから非同期処理は必要!
  14. 14. 実際に使ってみよう!
  15. 15. Threadを つかうんですか?><
  16. 16. 自分では使いません!
  17. 17. なんで、、、? ワーカースレッドからUIに直接干渉できない! ! ! GUIで想定される非同期処理の実現が 結構面倒くさい・・・
  18. 18. AsyncTask を使おう!
  19. 19. AsyncTask 簡単に非同期処理を実現するAPI。 継承して使います!
  20. 20. 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); } }
  21. 21. 演習1
  22. 22. 演習 さっきの演習で創ったアプリの DB処理をAsyncTaskでかいてみよー
  23. 23. AsyncTaskでなんでも できるじゃん!
  24. 24. ごめん、、、 できない、、、、
  25. 25. なにが問題? Activityがインスタンスを保持 →アプリケーションが全面にいないといけない
  26. 26. それで何が困るの? 音楽アプリで 音楽ききながら ブラウジングしたい! この場合、音楽アプリで音楽再生を 非同期実行していたとします
  27. 27. こうなる! え、ブラウザ立ち上げたら 音楽消えた・・・ これじゃ意味ないよ・・・
  28. 28. こうなる インターネット開ぃタラぅちのEX○LE消ェた。 ぃみわかんなぃ… ☆1つです。
  29. 29. どうしよう・・・ Serviceを使おう!!!
  30. 30. Serviceって・・・? バックグラウンド処理のためのコンポーネント  →画面を持たずに実行できる →実行プロセスのメインスレッド上で動く  →プロセス指定して実行できる
  31. 31. 第一回で やったよね・・・
  32. 32. バックグラウンド処理 (Service) サーバーから受信 バックグラウンドで 受信処理
  33. 33. バックグラウンド処理 (Service) 表示!!
  34. 34. これです!
  35. 35. Serviceは二回目にしては重い内容なので、 • 同じアプリの処理を別プロセスで起動 • 画面を起こさずに処理を行いたい こういう時に使うとだけ覚えておけば今日はOK
  36. 36. AsyncTaskのさらなる問題 • Activityから呼び出されるため、画面が背面に 回ったりすると途中で処理が中断される →処理時間の長いものには向かない!
  37. 37. 何を使えば・・・? 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(); }
  38. 38. 難しいのでAsyncTask だけ覚えて帰って・・・
  39. 39. 重い部分は次回
  40. 40. ごめんなさい。。。 (完)
  • ssuser0272f4

    Dec. 25, 2014
  • risingore

    Jun. 19, 2014

Vistos

Vistos totais

742

No Slideshare

0

De incorporações

0

Número de incorporações

16

Ações

Baixados

7

Compartilhados

0

Comentários

0

Curtir

2

×