[翻訳]Droid-Fu紹介一:BetterActivity,BetterService and BetterAsyncTask
5326 ワード
Droid-Fuは多くのAndroid開発者に非常に優れた共有ライブラリを提供しており、この記事ではDroid-Fuのアイデアやコア特性を紹介します.
Droid-Fuって何? Droid-Fuは、汎用のAndroidアプリケーションライブラリ です. Droid-Fuの主な目的は、Androidの開発をより容易にすることです. Droid-Fuはオープンソースの ですはまだ足りませんか?
Droid-Fuには多くのツールクラスが含まれており、非常に使いやすいAndroidコンポーネントもあり、これらはAndroidアプリケーションにとって非常に役立ちます.Droid-Fuは以下の分野でサポートされています. Androidアプリケーションのライフサイクル バックグラウンドタスク Httpメッセージ処理 リモートピクチャ処理 カスタム各種Adapter ...待って.Droidはまだ若くて、近い将来もっと素晴らしい特性があります!
基礎知識
Droid-Fuの最大の利点は、彼が提案したアプリケーションライフサイクルヘルプクラスです.Androidアプリケーションを開発している場合、その主なタスクはバックグラウンドタスクを実行することです.例えば、webからデータをキャプチャすると、アプリケーションでDroid-Fuを使用するに違いありません.
嫌いなAsyncTask
この話題について、私はすでに2つの文章で討論したことがある.3回目、私はやっと優雅な解決方法を見つけた.まずAsyncTaskの問題を見てみましょう.第一に、AsyncTaskは何ですか.これは、大きなオーバーヘッド操作を実行するヘルプクラスです.Webサービスにアクセスする必要がある携帯電話アプリケーションを開発している場合は、すでに使用している可能性があります.
基本的な考え方は、非同期タスクを開始し、タスクスレッドの実行中にきれいな進捗ボックスを表示し、タスクが結果をActivityに戻すと進捗ボックスが閉じます.クールですが、ユーザーが画面を回転させることを決定した場合、非同期タスクはまだ実行されています(画面を回転させると、現在のActivityはライフサイクル全体を完了します.その後、再作成し、onCreate()メソッドをコールバックします).あるいは電話がかかってきて、アプリケーションを中断して、Androidはこのアプリケーションのプロセスを殺すことを決定しました.どうすればいいですか?どちらのアクションもactivityを中断し、次回アプリケーションを使用し続けるとActivityがrerereateされます.残念なことに、AsyncTaskは依然として実行されており、再起動したActivityはメモリの中で全く異なるオブジェクト(ActivityのonCreate()を実行し、Activityが初めて起動したように)を指すポインタが古いActivityを指しているため、保持されています.AsyncTaskが古いActivityオブジェクトに結果を返すかどうかは分かりませんが(弱い参照であれば回収されている可能性があります)、いずれにしても新しいActivityは新しいActivityインスタンスであるため、データを受信しません.
今、人々は「はい、もう一度同じ仕事をして、要求を再送信します」と言うことができます.はい、そうしてもいいです.しかし、これは浪費で、本当に、あなたに自分が愚かだと感じさせますよね?また、ユーザーがWebサービスリクエストをトリガーし、画面を反転し、自分が望んでいないことに気づき、反転した場合、あなたのリクエストは平行な3倍に送信されます.これが何が欲しいの?多分できません.
BetterAsyncTaskが救助に来た
Droid-Fuがあってよかったです.彼は私たちに解決策を提供してくれました.BetterAsyncTask!(私は怠け者なので、もっと良い名前を出すことはできません).動作は全く同じですが、AsyncTaskは追加の作業を行います.まず、現在のアクティブなインスタンスが記録され、インスタンスが変更されると、パブリッシュされたデータが新しいインスタンスに戻ります.つまり、タスクを派遣し、画面を自由に反転させることができます.BetterAsyncTaskは、タスクの結果を現在のアクティブなインスタンスに返します.言い換えれば、タスクは永遠に1回しか実行されません.
問題は、BetterAsyncTaskが現在のアクティビティのインスタンスを見つけることができないため、アシスタント:DroidFuApplicationに依存しています.このクラスはApplicationのサブクラスです.BetterAsyncTaskを使用したい場合は、アプリケーションがこのクラスから派生します.そうしないと、動作しません.これは、DroidFuApplicationがアクティブなインスタンスの弱いマッピングを保持しているためです.BetterAsyncTaskが完了すると、アプリケーションでActivityインスタンスが取得されます.
必要なのは任務を開始することだけです
This is all you have to do to launch a task showing the standard Android indeterminate progress dialog:
また、BetterAsyncTaskは、実行中にダイアログボックスを自動的に開いたり閉じたりしますが、実行を進めたり、アクティブなタイトルバーの進捗バーをトリガーしたりします.また、タスクを実行中に例外を投げ出し、エラー処理handleにパブリッシュすることもできます.
BetterActivityとBetterService
Droid-Fuは、アクティビティとサービスのために簡単ですが、非常に有用な補助ベースクラスを提供します.現在、BetterDefaultActivity、BetterListActivity、BetterServiceしかありませんが、MapActivityなどのBetter*シリーズAndroidアクティビティベースクラスを実現する予定です.
あなたは以下の面で助けられます.
ライフサイクルヘルプクラス
これらの方法では、コンテキストのライフサイクル状態に基づいて、特定の作業を完了するかを決定できます. isLaunching():ActivityまたはServiceが初めてonCreateを実行した場合のみtrue isRestoring():ActivityまたはServiceがAndroidによって殺された後に回復した場合はtrue isResuming():ActivityまたはServiceがonResumeを実行する前にonCreateを実行しなかった場合はtrue i s A p l i c a tionBroughtToBackground():自分のアプリケーション・アクティビティによってアクティビティが一時停止しているか、まったく異なるアプリケーションによって一時停止しているかを区別する必要がある場合があります.この方法は、別のアプリケーションによってアクティビティを一時停止した場合、true に戻ります.
Dialogヘルプクラス
BetterActivityは、Dialogを簡単に表示できるようにするためのヘルプを提供しています. showInfoDialog():通知アイコン付き警告ダイアログ が表示されます. showAlertDialog():警告アイコン付きの警告ダイアログ が表示されます. showErrorDialog():showAlertDialogと同様に、異常情報を表示するパラメータが1つ増えただけです showListDialog():エントリをクリックすると、プロセッサ がコールバックするリストダイアログが表示されます.
これらのDialogはすべてカスタマイズ可能である(e.g.message or icon).
もっとサプライズがあります!
今後の記事では、Droid-Fuの特性をもっと紹介します!
クール、私はどこでそれを得ることができますか?
The Droid-Fu source code is currently hosted on GitHub , which is the place where the cool kidz hang out these days. It’s a maven project, but the JARs aren’t yet hosted anywhere. Anyway, just check it out using git clone:
and run:
(you need to install git and maven2 for all that magic to work).
Droid-Fuって何?
Droid-Fuには多くのツールクラスが含まれており、非常に使いやすいAndroidコンポーネントもあり、これらはAndroidアプリケーションにとって非常に役立ちます.Droid-Fuは以下の分野でサポートされています.
基礎知識
Droid-Fuの最大の利点は、彼が提案したアプリケーションライフサイクルヘルプクラスです.Androidアプリケーションを開発している場合、その主なタスクはバックグラウンドタスクを実行することです.例えば、webからデータをキャプチャすると、アプリケーションでDroid-Fuを使用するに違いありません.
嫌いなAsyncTask
この話題について、私はすでに2つの文章で討論したことがある.3回目、私はやっと優雅な解決方法を見つけた.まずAsyncTaskの問題を見てみましょう.第一に、AsyncTaskは何ですか.これは、大きなオーバーヘッド操作を実行するヘルプクラスです.Webサービスにアクセスする必要がある携帯電話アプリケーションを開発している場合は、すでに使用している可能性があります.
基本的な考え方は、非同期タスクを開始し、タスクスレッドの実行中にきれいな進捗ボックスを表示し、タスクが結果をActivityに戻すと進捗ボックスが閉じます.クールですが、ユーザーが画面を回転させることを決定した場合、非同期タスクはまだ実行されています(画面を回転させると、現在のActivityはライフサイクル全体を完了します.その後、再作成し、onCreate()メソッドをコールバックします).あるいは電話がかかってきて、アプリケーションを中断して、Androidはこのアプリケーションのプロセスを殺すことを決定しました.どうすればいいですか?どちらのアクションもactivityを中断し、次回アプリケーションを使用し続けるとActivityがrerereateされます.残念なことに、AsyncTaskは依然として実行されており、再起動したActivityはメモリの中で全く異なるオブジェクト(ActivityのonCreate()を実行し、Activityが初めて起動したように)を指すポインタが古いActivityを指しているため、保持されています.AsyncTaskが古いActivityオブジェクトに結果を返すかどうかは分かりませんが(弱い参照であれば回収されている可能性があります)、いずれにしても新しいActivityは新しいActivityインスタンスであるため、データを受信しません.
今、人々は「はい、もう一度同じ仕事をして、要求を再送信します」と言うことができます.はい、そうしてもいいです.しかし、これは浪費で、本当に、あなたに自分が愚かだと感じさせますよね?また、ユーザーがWebサービスリクエストをトリガーし、画面を反転し、自分が望んでいないことに気づき、反転した場合、あなたのリクエストは平行な3倍に送信されます.これが何が欲しいの?多分できません.
BetterAsyncTaskが救助に来た
Droid-Fuがあってよかったです.彼は私たちに解決策を提供してくれました.BetterAsyncTask!(私は怠け者なので、もっと良い名前を出すことはできません).動作は全く同じですが、AsyncTaskは追加の作業を行います.まず、現在のアクティブなインスタンスが記録され、インスタンスが変更されると、パブリッシュされたデータが新しいインスタンスに戻ります.つまり、タスクを派遣し、画面を自由に反転させることができます.BetterAsyncTaskは、タスクの結果を現在のアクティブなインスタンスに返します.言い換えれば、タスクは永遠に1回しか実行されません.
問題は、BetterAsyncTaskが現在のアクティビティのインスタンスを見つけることができないため、アシスタント:DroidFuApplicationに依存しています.このクラスはApplicationのサブクラスです.BetterAsyncTaskを使用したい場合は、アプリケーションがこのクラスから派生します.そうしないと、動作しません.これは、DroidFuApplicationがアクティブなインスタンスの弱いマッピングを保持しているためです.BetterAsyncTaskが完了すると、アプリケーションでActivityインスタンスが取得されます.
必要なのは任務を開始することだけです
This is all you have to do to launch a task showing the standard Android indeterminate progress dialog:
01
public
class
MyActivity
extends
BetterDefaultActivity {
02
03
protected
void
onResume() {
04
super
.onResume();
05
06
if
(isLaunching()) {
// this is explained further down this article
07
MyBetterAsyncTask task =
new
MyBetterAsyncTask(
this
);
08
task.execute(someData);
09
}
10
}
11
12
}
また、BetterAsyncTaskは、実行中にダイアログボックスを自動的に開いたり閉じたりしますが、実行を進めたり、アクティブなタイトルバーの進捗バーをトリガーしたりします.また、タスクを実行中に例外を投げ出し、エラー処理handleにパブリッシュすることもできます.
BetterActivityとBetterService
Droid-Fuは、アクティビティとサービスのために簡単ですが、非常に有用な補助ベースクラスを提供します.現在、BetterDefaultActivity、BetterListActivity、BetterServiceしかありませんが、MapActivityなどのBetter*シリーズAndroidアクティビティベースクラスを実現する予定です.
あなたは以下の面で助けられます.
ライフサイクルヘルプクラス
これらの方法では、コンテキストのライフサイクル状態に基づいて、特定の作業を完了するかを決定できます.
Dialogヘルプクラス
BetterActivityは、Dialogを簡単に表示できるようにするためのヘルプを提供しています.
これらのDialogはすべてカスタマイズ可能である(e.g.message or icon).
もっとサプライズがあります!
今後の記事では、Droid-Fuの特性をもっと紹介します!
クール、私はどこでそれを得ることができますか?
The Droid-Fu source code is currently hosted on GitHub , which is the place where the cool kidz hang out these days. It’s a maven project, but the JARs aren’t yet hosted anywhere. Anyway, just check it out using git clone:
git clone git://github.com/kaeppler/droid-fu.git
and run:
mvn install -DcopyTo=path/to/your/apps/lib/dir
(you need to install git and maven2 for all that magic to work).