Androidで非同期処理を行うAsyncTaskがあったため、Rubotoでサンプルを作ってみたときのメモ。
■環境
Platform | JDK | ant | Ruby | ruboto | jruby-jars | Device | API level |
---|---|---|---|---|---|---|---|
Windows7 x64 | 1.7.0_25 | 1.9.1 | RubyInstaller 1.9.3-p448 | 0.13.0 | 1.7.4 | Nexus7 2012 | android-17 |
■参考にしたところ
Java版の以下のソースを参考にしました。
[Android] AsyncTask による非同期処理 | rakuishi.com
また、Rubotoで実装していたものもいくつかあり、ハマりどころは以下が参考になりました。
なお、自分の場合 ruboto gen subclass は使わず、AsyncTaskを継承したMyTaskを使いました。
hilohiro/ruboto-sample-1 · GitHub
他に、ThreadとHandlerを使ったサンプルもありました。
Ruboto: 非同期処理を行う(Thread, Handler) | 自転車で通勤しましょ♪ブログ
■ソース
require 'ruboto/widget' require 'ruboto/util/toast' ruboto_import_widgets :Button, :LinearLayout, :TextView java_import 'android.os.AsyncTask' # Thread.sleepを使いたいため追加 java_import 'java.lang.Thread' class AsyncTaskActivity attr_accessor :status def onCreate(bundle) super view = linear_layout orientation: :vertical do @status = text_view text: 'before', text_size: 48 button text: 'start', on_click_listener: MyClickListener.new(self) end self.content_view = view end end class MyClickListener def initialize(activity) @activity = activity end def onClick(view) task = MyTask.new task.add_activity(@activity) task.execute '' end end class MyTask < AsyncTask def add_activity(activity) @activity = activity end def doInBackground(params) Thread.sleep(1000) 'after' end def onPostExecute(result) @activity.status.text = result @activity.toast 'done!' end end
Gistにも上げておきました。
RubotoでのAsyncTaskサンプル