3

私はホーム画面ウィジェットをImageViewとして作成しました。コードはウィジェット全体を生成し、それをビットマップとしてRemoteViewsに書き込みます。私のG1のようにメモリが少ない低速のデバイスでは、ビットマップの生成に数秒かかることがあります。恐ろしい強制終了を回避するために、すべてのグラフィックコードをAsyncTaskに移動しました。ここまでは順調ですね。

ただし、メモリが非常に少ない状態では、AsyncTaskは、ビットマップの生成が完了する前にOSによって簡単に強制終了され、ホーム画面に空の四角が表示される可能性があります。したがって、AsyncTaskを作成する前に、現在+ 5秒間アラームを設定し、グラフィックが完了した後、アラームをリセットします。ここでの前提は、アラームがトリガーされた場合、プロセスが強制終了された可能性が高く、別のnow+5アラームを設定して再開する必要があるということです。

これは機能しますが、メモリが極端に少ない状態では、ウィジェットの描画に数回(20秒以上)かかる可能性があるため、静的リソースとしてプレースホルダー砂時計画像を追加しました。これは、実際の画像の準備ができるまでホーム画面に表示されます。 。

私の質問はこれです:これは最良の方法ですか?終了するまでAsyncTaskを強制終了しないように(丁寧に)OSに依頼する方法はありますか(強制終了すると実際にはシステムリソースの浪費が増えるという理由で)?

プロセスが「表示」として分類されている場合、Androidは最後の手段を除いてプロセスを強制終了しないことを理解しています。しかし、AsyncTaskを「可視」としてタグ付けする方法がわかりません。ウィジェットの描画が完了するとすぐにプロセスが強制終了されることを非常に嬉しく思います。完了するのに十分長く生き続けることを望みます。

4

3 に答える 3

0

これに IntentService を使用することを検討しましたか? サービス コードの実行中は、フォアグラウンド タスクと同じ強制終了の優先度が与えられます。AsyncTask のようなウィジェットとの密接な結合はありませんが、コードが完成する可能性が高くなると思います。

于 2010-09-04T20:45:58.837 に答える