0

GPS 座標をデータベースに送信するためのスレッドを作成できるように、ルーパーを実装しようとしています。私はJavaが初めてで、これはすべて本当に混乱していますが、助けてくれるかもしれません. 次のクラス メソッドは、ボタンが押されたときにメイン アクティビティによって呼び出されます。このメソッドは GPS 位置を検出し、それを別のクラスのメソッドに送信します。このメソッドは緯度と経度 (ユーザー ID と共に) をデータベースに送信します。アプリの速度が低下したりフリーズしたりする問題が時々発生するため、このプロセス用の新しいスレッドを作成する方法を実装する必要があるようです。何か案は。初心者なのでお手柔らかに。これが私のコードです:

    public class LocationActivity extends Thread{

    private LocationManager locManager;
    private LocationListener locListener;

    public void startLocation(Context context, String usr_id2)
    {   
        final String usr = usr_id2;

    //get a reference to the LocationManager
    locManager = (LocationManager) context.getSystemService(Context.LOCATION_SERVICE);


    //checked to receive updates from the position
    locListener = new LocationListener() {
        public void onLocationChanged(Location location) {
            SendActivity.send(location, usr);
        }
        public void onProviderDisabled(String provider){
            //labelState.setText("Provider OFF");
        }
        public void onProviderEnabled(String provider){
            //labelState.setText("Provider ON ");
        }
        public void onStatusChanged(String provider, int status, Bundle extras){
            //Log.i("", "Provider Status: " + status);
            }
        };

        Looper looper = null;
        locManager.requestLocationUpdates(LocationManager.GPS_PROVIDER, 0, 0, locListener, looper);
    }
}

もう 1 つの質問ですが、ルーパーをここに追加するか、実際に情報をデータベースに送信するクラスに追加しますか? HTTP Post を使用して、情報を MySQL データベースに追加する PHP プログラムに送信します。

4

3 に答える 3

4

ここで別の戦術を試してみたいと思います。AndroidにはAsynTask、スレッドで実行される作業をオフロードする開発者の負担を軽減するために作成されたというクラスがあります。

AsyncTaskを使用すると、UIスレッドを適切かつ簡単に使用できます。このクラスを使用すると、スレッドやハンドラーを操作しなくても、バックグラウンド操作を実行してUIスレッドで結果を公開できます。

DBに書き込んでサーバーにデータを送り返すという点では、を使用することを検討しServiceますが、UIスレッドでネイティブに実行されないサービスはIntentService

于 2012-02-28T14:31:51.417 に答える
1

このような操作にはクラスの使用を検討する必要がAsyncTaskあります。これは非常に使いやすく、UI スレッドと同期する簡単な方法を提供します。これは、Android でのスレッド化に関する素晴らしい投稿です。詳細についてAsyncTaskは、Android のドキュメントを参照してください。お役に立てれば。

于 2012-02-28T14:34:26.917 に答える
0

カスタム スレッドから「コンテキスト」または任意の UI オブジェクトにアクセスすることはできません。これは、これらがメイン UI スレッドで作成され、スレッドからこれらのオブジェクトにアクセスできないためです。

Martyn が言ったように、AsyncTask を作成するか、Handlers を使用して context/ui にアクセスする必要があります。

あなたの場合、AsyncTaskに行きます

于 2012-02-28T14:34:57.677 に答える