0

現在、Web サービスを使用してサーバーに保存されている画像とテキストを取得しています。SOAPを使用して消費しています。しかし、問題は、アプリを開くたびに、何度も何度もロードを開始することです。これは、Activity の oncreate メソッドで、バックグラウンドでデータをロードしている asynctask を呼び出したためです。

最初に webservice からデータを取得し、次にそれらをアプリに表示する順序で実装したいと考えています。アプリを閉じてもう一度開く場合、またはその時点でインターネットに接続されていない場合は、最後のセッション中に読み込まれたデータが表示されます。これを達成する方法???? あなたのアイデアを共有してください

感謝と前進

4

5 に答える 5

1

ディスク キャッシュを使用してリモート サービスからビットマップをキャッシュできます。これを行う方法の詳細については、Google 開発者サイトhttp://developer.android.com/training/displaying-bitmaps/cache-bitmap.htmlを参照してください。

これにより、接続がない場合、またはリモートの画像をロードしながら画像をロードしたい場合に、画像を保存してすぐに表示することができます。

保存する必要があるテキストに応じて、テキストをキャッシュ内の画像に関連付けるか、代わりにデータを使用して ArrayList を設定し、ディスクに保存できます。詳細はこちらAndroidでデータをキャッシュする最良の方法

最後に、AT&T ARO ツールなど、ネットワーク コードを最大限に活用するためのツールがあります。これを実行すると、ネットワーク呼び出しを最小限に抑えてアプリを最適化できます。http://developer.att.com/aroを参照

于 2013-03-06T11:50:41.343 に答える
0

それらの画像を再度「再利用」したい場合は、デバイスのSDカードにキャッシュすることを検討してください。例えば:

FileOutputStream outFile = new FileOutputStream(path);
image.compress(Bitmap.CompressFormat.JPEG, 100, outFile);
outFile.close(); 

次に、SDカードからファイルを受信し、BitmapFactoryおそらくアクティビティのonResume()方法で特定のロジックによってデコードします(たとえば、デバイスがインターネットに接続されているかどうかを検出するためなど)。

File imageFile = new File(path);
Bitmap bitmap = BitmapFactory.decodeFile(imageFile.getAbsolutePath());

SDカードにアクセスするために必要な権限を追加することを忘れないでください:)

于 2013-03-04T09:01:42.583 に答える
0

端末の向きを変えれば同じ挙動になると思います。アプリケーションを再作成すると、同じメソッドが呼び出されるためです。画像をロードする関数内にフラグを設定してからonCreate()onResume()メソッド内でフラグが設定されているかどうかを確認し、関数が呼び出されないようにする必要があります。それが役立つかどうかを確認してください。

乾杯

于 2013-03-04T08:27:47.977 に答える
0

Android はMVC ( Model-View-Controller ) パターンを実装しています。このパターンでは、(ほとんどの場合) 既存のViewクラスを再利用し、 ControllerModelを実装します。あなたのアクティビティはControllerです。ただし、データのダウンロードなどの操作はModelで行う必要があります。

そのため、Activity の破棄と作成に耐えられるデータのクラスを作成する必要があります (これは特に、方向が変更されたときに発生します)。

AsyncTaskanから anを呼び出すのActivityは明らかに間違っています。

さらに、状況によっては、Android がアプリケーション プロセスを強制終了して再起動し、RAM に保持されているデータが失われる可能性があることに注意してください。(ただし、通知が表示されることは保証されてonPause()います。) ただし、アプリケーションはそのような再起動から回復できる必要があります。onSaveInstanceState(Bundle)および の Bundle 引数を 参照してくださいonCreate (Bundle savedInstanceState)

また、参照してください: AsyncTask は本当に概念的に欠陥がありますか、それとも何か不足していますか?

于 2013-03-04T09:21:50.700 に答える
0

そのようなものを実装したい場合は、アプリケーションのDBを作成して、アプリケーションを閉じたときにデータが削除されないようにする必要があります。

他のすべてのオプションでは、アプリがアクティブなアプリケーションでない場合、GC によってデータが削除される可能性があるためです。

次に、指定された時間ごとに実行され、インターネット接続をチェックし、サーバーに新しいデータがあるかどうかを確認するサービスを作成する必要があります。

于 2013-03-04T08:25:31.473 に答える