1

いくつかのアクティビティを含むアプリがあります。これらのアクティビティには共通のリソース (matrix arrayLists) が必要なので、このリソースを何度もリロードするのを避けるために (別のアクティビティに変更するとき、または向きを変更するとき)、サービスを作成しました。

まず、スティッキーにするためにstartService(Intent)で呼び出します。その後、サービスをアクティビティにバインドします bindService(sIntent, mConnection, BIND_AUTO_CREATE);

最後に、サービスからデータを取得しようとするコードがいくつかありますが、NullPointerException が生成されます。アクセスするデータコードの前にstartServicebindServiceを配置しましたが、(ログでわかるように)アプリがクラッシュした後にサービスが開始されるためです。

アクセスしようとする前に、ロードされたデータを確実に取得する方法を知っている人はいますか?

前もって感謝します。

4

3 に答える 3

2

共通リソースをSharedPreferenceに保存する方が簡単な場合があります。SharedPreference はアプリケーションのすべてのスレッドからアクセスでき、実行間で永続的です。これは、リソースが何であるかによって異なります。

メソッドでサービスを機能させたい場合は、透過的な Activity を使用してこれを行うことができますただし、 AsyncTaskはより簡単でシンプルなソリューションかもしれません。

AsyncTaskを使用してデータをロードしてみてください。ロードにアクティビティが行うことは何でも選択できます ([進行状況] ダイアログ? ) onPostExecute()。これは、AsyncTask が、リソースを管理するバックグラウンド スレッドとしてのサービスの概念に取って代わることを意味します。(読み込み、ダウンロードなど)。

次回もログを投稿してください。役立つかもしれません。

于 2013-02-20T13:58:21.867 に答える
1

Applicationを拡張するクラスのonCreate()でService を開始します。または、さらに良いことに、Service が実行している作業を Application クラスで実行します。このクラスは、アプリの他の部分よりも前に作成されることが保証されています。Service の起動には時間がかかり、競合状態が発生する場合がありますが、Application を拡張するクラスは常に起動されるアプリの最初の部分です。

于 2013-02-20T13:54:15.100 に答える