2016-05-24 3 views
0

私のアプリでは、マップ上のトラックとウェイポイントを表示するためにgpxとkmlファイルをインポートします。この操作のために、私は約5つの方法を使用します。 exfilechoserでいくつかの長いgpx/kmlトラックをインポートしようとしない限り、すべてうまく動作します。 画面は数秒間黒くなり、logcatにはスキップされたフレーム(> 600)と表示されます。 これらのUIの計算方法を教えてください。 または、どのようにAsyncTaskを約5つのメソッドで使用できますか?これは可能ですか?重い計算を行ういくつかの方法を扱うにはどうすればよいですか?

+0

使用AsyncTaskそれがバックグラウンドですべてのプロセスを実行すると、uは作業が行われたときに呼び出さonPostExecuteメソッドを持っている – thunder413

+0

あなたがスレッドを使用する必要があり、私はあなたが書いたように、それはasynctaskを使用してしまうの良いソリューションを推測します。はい、5つの異なるasynctaskを使用できますが、それらは非同期になるので、作業したデータをどのように処理するかを勉強しなければならないことに注意してください。 – michoprogrammer

+0

それは難しいかもしれません(彼らが計算を整列させるために)。多分私は何かを考え出すでしょう。あなたの返信ありがとう! – stan210

答えて

0

あなたの質問を見ると、handlerとjava normal multi threading conceptを使用することをお勧めします。 私はAsyntaskがバックグラウンドで長時間実行されるタスクを実行するための非常に良いアプローチだとは思わない。

サーバー側で計算するとモバイルサイトのオーバーヘッドを減らすことができます

+0

お返事ありがとうございます!私はそれをテストします。 – stan210

0

いくつかの方法があります。

  1. 非同期に計算します。 Android SDKは、問題を非同期的に解決するためにHandler, IntentSevice, AsyncTask, HandlerThreadを提供します。ちなみに、重心を解くマルチスレッドを使うことが推奨されています。

  2. サーバに計算を許可します。モバイルデバイスは計算には適していません。計算は電力を消費し、アプリのパフォーマンスに影響します。

0

私はこの目的のために設計されたServiceを使用するべきだと思います。ドキュメント内には次のように書かれています。

サービスは、バックグラウンドで長時間実行する 操作を実行できるアプリケーションコンポーネントです。

サービスで新しいスレッドを作成することについて覚えておく必要があります。

注意:サービスは、独自のスレッドを作成しません。そのホストプロセス- サービスのメインスレッドで実行され、(特に指定しない限り)別の プロセスで実行されません。つまり、 サービスがCPU集約的な作業またはブロック操作 (MP3再生やネットワーキングなど)を行う場合は、サービス内に新しいスレッド を作成してその作業を行う必要があります。

+0

返信いただきありがとうございます!私はすでにこの問題をサービスで解決しようとしました。しかし、画面はまだ黒くなります。私はサービスを利用しました。またはIntentServiceを使用する必要がありますか?しかし、それがうまくいけば、私はもう一度それを試してみるでしょう。 – stan210

+0

スレッドを開始しましたか?サービスはデフォルトでメインスレッドで実行されます。 "注意:サービスはホストプロセスのメインスレッドで実行されます。サービスは独自のスレッドを作成せず、別のプロセスで実行されません(特に指定しない限り)。 (MP3再生やネットワーキングのような)CPUを大量に使用する作業やブロッキング操作を行うには、その作業のためにサービス内に新しいスレッドを作成する必要があります。 –

関連する問題