- Kotlin1.3とCoroutine1.0.0とJetpack - なぜAndroidでコルーチンを使いたいか - Androidでコルーチンを使う準備 - 並行処理を書く(直列、並列、スコープと例外) - おまけ1: Rx with Coroutine - おまけ2: Jetpack …
Design and Strategy: How to Deal with People Who Don’t "Get" Design
まずこの記事について この記事は #kosen10s Advent Calendar の6日目の記事です。 <- 前日の記事(@do_su_0805) 翌日の記事(@kogepan159)-> Kotlinについて何かを書きたい ちょくちょくAndroidについて書いたりしている(最近イベントレポートしかしてない。まずい)んですが、最近業務でKotlinを書いてた(今はJavaに戻ったりしている)り、趣味コードや勉強会に出るときのサンプルを全部Kotlinにしたりしています。KotlinかわいいよKotlin。 というわけで今年も終わるということでちょっと趣味で書いているAndroid向けの画像ローダについて話してみます。ちゃんと欲しい機能ができればOSS化するつもりですが時間がなかなか取れなくてこいつにコミットする時間がなくてア 作りたい物 Androidで画像ローダといったら squa
2017/04/04に行われた第5回Kotlin勉強会@Sansanの発表資料です。
AndroidでKotlinのCoroutineを使うときの注意です。CoroutineDispatcherの選択を誤ると意図しない結果になります。 環境はkotlinx-coroutines-android:0.16になります。 非同期処理をCoroutineで実現する場合、以下のようなCommonPoolを使ったサンプルが多いと思いますが、これではジョブをキャンセルした場合にasync内の処理がキャンセルされません。 では、違う方法にします。先程CommpnPoolを渡してた場所をcontextを渡すようにします。contextを指定し場合は親のジョブの子のような扱いになり、ジョブをキャンセルしたときに子もキャンセルされます。
こんにちは、最近TDDに回帰している id:takuji31 です。 最近 Espresso Idling Resource を使い始めたので紹介します。 なお、この記事の一部は本日開催の関西モバイルアプリ研究会#24で発表された内容です。 UIテストを書く時の悩み 雑な解決方法 ちょっと賢い方法 Espresso Idling Resource 使い方 セットアップ IdlingResource fun getName(): String fun isIdleNow(): Boolean fun registerIdleTransitionCallback(callback: IdlingResource.ResourceCallback?) 実装 使う アプリ側 テストコード デフォルトで用意されているIdlingResource CountingIdlingResource Idli
Rx Ja Night Vol.2 - connpassで「 Androidの非同期処理をKotlinコルーチンで行う」という話をしてきました。 スライドで使っているコードは次のリポジトリに置いています。 github.com 今回取り扱った非同期処理の範囲 スライドやリポジトリのREADME.mdに大体書いているのですがコチラにも載せときます。 詳細な説明はスライドやリポジトリを参照してください。 次の非同期処理をコルーチンで実現します。 単発の実行 直列の実行 並列の実行 + エラーハンドリング キャンセル 環境 すべてKotlinが提供する標準の機能を用います。 implementation "org.jetbrains.kotlin:kotlin-stdlib-jre7:1.1.2-4" implementation "org.jetbrains.kotlinx:kotlinx-c
はじめに Androidで通信処理(APIアクセスなど)を行うには、別スレッドを用いて非同期で行う必要があります。そうしないと例外が吐かれます。ここでは、こうした非同期処理を実装する際にハマったことなどから、色々まとめたいと思います。 さっさとベストな方法を教えろ!という方は,一番下まで飛ばせばよろしいかと思います. ここで使うクラス android.os.AsyncTask java.util.concurrent.CountDownLatch 大事なのはこの2つです。 AsyncTaskとは Androidで非同期処理させる際によく用いられます。UIスレッドからの分離など、面倒くさいことは勝手にやってくれるので、楽に処理を書けます。なお、以下の点に従う必要があります。 ジェネリックなクラスなので、Params,Progless,Resultは必要な型に置き換える。 実行時はexecut
前回は、DaggerのDI機能を紹介しました。 PPAPで学ぶDaggerによるDI - きしだのはてな DaggerはDIコンテナとしては知られていますが、非同期処理フレームワークとして使えることはあまり知られていないと思います。機能はあったのに、ドキュメントがなかったし、ドキュメントも非同期処理に使えることがわかりにくいし。 https://google.github.io/dagger/producers.html サーバーサイドではSpringFrameworkやCDIなどのDIコンテナがすでに使われているのと、DaggerのDIでは機能不足であるため、Daggerが候補になることはあまりありません。 でも、非同期処理フレームワークとしてであれば、SpringFrameworkやCDIを使っている状況でも有用です。 ExecutorModuleの定義 非同期処理を行うために、スレッ
C# 5.0のasync/awaitを使うと、多くの場面ではシングル スレッド的な動作になるし、多くの場面ではlock不要(結果的に、デッドロックが起こりようなくなる)になったりします。 ただし、「多くの場面で」。「必ず」ではないのがはまりどころ。いくつかの場面では、同時実行制御が必要です(普通にマルチスレッドの平行実行になるので、同時に同じデータにアクセスされる可能性を考慮しないとバグります)。 前提知識 いくつか、C# 5.0世代の非同期処理についての前提知識は、以下のスライド(先月末の.NETラボでの発表)を参考にしてください。 5~12ページ: async/awaitの書き方 17~22ページ: スレッドとそのコスト 24~26ページ: スレッド プール 29~32ページ: I/O完了待ちと非同期API 36~40ページ: UIスレッドとディスパッチャー 41~45ページ: 同期コ
2. In a recent post on the NetBeans developer site, one of the core maintainer observed that a single class had been patched over 14 times to fix threading related problems. --- Brian Goetz et al “Java Concurrency In Practice” 3. 1/3 of the code in Adobe’s desktop applications is devoted to event handling logic 1/2 of the bugs reported during a product cycle exist in this code --- quoted in Martin
We recently released a new version of our mobile app for Android. Although it was a huge improvement from previous installments in terms of features, design, and usability, there was one nagging issue in the back of our minds: speed. There are times when the app isn’t as snappy as we’d like it to be. After some profiling, benchmarks, and common sense, we determined that retrieving data from the AP
サーバーとの通信、HTML5のAPIを使ったアプリケーションの開発に必要不可欠な「非同期処理」について学びましょう。 非同期処理とは背景処理の「非同期」化サーバーとの通信を例に考えてみようPromiseパターン基本的な考え方コードの基本形(1)呼び出した関数がPromiseパターンに従っている場合(2)自分で作成する関数でPromiseパターンを利用したい場合非同期処理の「失敗」の扱い方(1)呼び出した関数の失敗通知を受け取る(2)自分が作成する非同期処理関数で失敗を通知する複数の非同期処理をつなげて順番に行う複数の非同期処理を並列に実行して、全てが完了したら最終処理を行う非同期処理とは背景Webブラウザは基本的に、JavaScriptコードを実行するとき、コードを上から順に1行ずつ実行します。 また、関数を呼び出すと、その関数の実行が終了するまで(return文によって呼び出し元の関数に
AsyncTaskと仲良くなろう:バックグラウンド処理とキャンセル http://greety.sakura.ne.jp/redo/2011/02/asynctask.html というのを昔書いたのですが。色々あってイマイチになっていたので、さしあたって以下の2点をどうにかしたものを置いておくことにします。 <差分> ・DialogFragment対応。 ・なんちゃってHTMLスクレイピングをjsoupベースに変更。 ○仲良くする必要はないの? AsyncTaskLoaderさんの存在もあるんですが、ANRやUIスレッドの概念を理解するのが一番大事で、次にHandler/Message/Loaderあたりの低レベルな仕組みを理解してしまえば、AsyncTaskというのはやっぱり「ヘルパークラス」でしかないな、という。 AsycTaskもLoader系も「(Andoid標準のコーディング手法
※2017年6月追記 GoogleからAndroidアプリの設計について、いい資料がでています。 https://developer.android.com/topic/libraries/architecture/guide.html この記事にあるとおり、Retrofit等を使ったほうがモダンな実装ができそうです。 AsyncTaskLoaderを使い複数の通信を実装する方法は沢山あると思います。 Androidの通信まわりの実装について考える [メモ] ここでは上記のリンク先の「4」で実装します。 通信クラスを作成 ActivityまたはFragmentではなく通信クラスをAsyncTaskLoaderのコールバック先にする 1つの通信につき1つのメソッドを用意。戻り値は各通信のメソッド毎にインターフェースを用意 JSONのパース処理は別のクラスにまとめる(処理が短く分ける必要がない
クライアントアプリにとって、マルチスレッドプログラミングは避けては通れない重要な概念です。しかし、気をつけないとハマるポイントも多く、初めてクライアントアプリを学ぶ人たちからすると、複雑で難解な取っつきづらいものでもあります。ここでは、スレッドの基本から、効率的な使い方、また複雑化しやすいポイントをシンプルに実装するためのノウハウを見ていきます。 TL;DR スレッドの取り扱い方を知る Threadをそのまま使わず、AsyncTaskやIntentService、時にThreadPoolExecutorを使ってスレッドの使い方を効率化する。 複雑な処理フローをシンプルに扱うためのフレームワークを導入する PromiseやRxAndroidなどで、複雑化しやすいポイントを整理する。 スレッドの基本 スレッドといえば、ThreadクラスやRunnableクラスがベースにあります。以下のようにす
こんばんは。 今回は、Android(Java)でバックグラウンド処理(非同期処理)をする方法について、メモします。 また、バックグラウンド処理中にプログレスダイアログを表示させ、キャンセルにも対応するようにしました。 Androidでバックグラウンド処理をしようとすると、UI Threadを使いメインスレッドとは別スレッドとして処理をさせるようにする必要があります。 また、処理中にUI更新を行うためにはHandlerを利用しなければなりません。 ただ、それだと少しめんどくさいので、今回は別スレッドでの処理と処理中や処理完了後のUI更新を簡単にしてくれるAsyncTaskというものを使って書いていきます。 (なお、UI ThreadやHandlerを利用した方法はこちらのサイトに詳しく説明してあります。一度見ておくとAsyncTaskについての理解の助けになるかもしれません。) 基本的にこ
非同期処理を行う方法にAsyncTaskを使う方法があります。 AsyncTaskを使うとThreadやRunnableを意識することなく、 メインスレッドとは別のスレッドで処理を行うことができます。 非同期処理中であってもメインスレッドでの処理が可能です。 非同期処理を行う際、Handlerクラスを使って画面更新処理を行うと 少しコードが煩雑になってしまいますが、 AsyncTaskクラスを使うとそのような事がなく、 非同期処理と画面更新処理を行うことができます。 ■AsyncTaskに用意されている主なメソッド onPreExecute() doInBackgroundメソッドの実行前にメインスレッドで実行されます。 非同期処理前に何か処理を行いたい時などに使うことができます。 doInBackground() メインスレッドとは別のスレッドで実行されます。 非同期で処理したい内容を記
リリース、障害情報などのサービスのお知らせ
最新の人気エントリーの配信
処理を実行中です
j次のブックマーク
k前のブックマーク
lあとで読む
eコメント一覧を開く
oページを開く