2

これが読み込みの問題です。アプリケーションは3秒間待機してから、パスを描画する必要があります。これで、読み込み中のメッセージボックスが3秒以内に表示されますが、アプリケーションは3秒間待機せず、すぐに描画します。コーディングに問題はありますか?

どうもありがとう!!

 public void drawpath(){
       // first to do some checking
    if (sourceLat.equals("22.3366467")  && destinationLat.equals("35.68449"))
        ShowMsgDialog("Please enter the starting point and destination");
    else if (sourceLat.equals("22.3366467") )
        ShowMsgDialog("Please enter the starting point by touch");
    else if (destinationLat.equals("35.68449") )
        ShowMsgDialog("Please enter the destination by touch");

    else if (pairs != null ){
        //  go to loading function
        loading();
        // Start to draw the path
        String[] lngLat = pairs[0].split(",");

        GeoPoint startGP = new GeoPoint((int) (Double.parseDouble(lngLat[1]) * 1E6), (int) (Double.parseDouble(lngLat[0]) * 1E6));

         mc = mapView.getController();
         geoPoint = startGP;
         mc.setCenter(geoPoint);
         mc.setZoom(15);
         mapView.getOverlays().add(new DirectionPathOverlay(startGP, startGP));

                ...... 
        }

Loading()関数内:

private void loading() {
    progressDialog = ProgressDialog.show(this, "Showing Data..", "please wait", true, false);
    new Thread()
    { 
      public void run()
      { 
        try{ 
          sleep(3000);
        }
        catch (Exception e){
          e.printStackTrace();
        }
        finally{
            progressDialog.dismiss();    
        }
      }
    }.start(); 
}
4

4 に答える 4

25

次の方法でも実行できます。

new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
            drawPath();
        }
    }, 5000);

これはlint警告を表示しません。

于 2012-11-29T12:12:30.853 に答える
2

ハンドラーは非常に簡単にジョブを実行します。別のスレッドやAsyncTask()は必要ありません。

アクティビティでハンドラーを使用して、次の場合にメソッドdrawPath()を呼び出すなどのイベントを遅らせます。

private RefreshHandler mRedrawHandler = new RefreshHandler(); 
 private RefreshHandler mRedrawHandler = new RefreshHandler(); 

     class RefreshHandler extends Handler {  
            @Override  
            public void handleMessage(Message msg) {  
          drawPath(); 
            }  

            public void sleep(long delayMillis) {  
              this.removeMessages(0);  
              sendMessageDelayed(obtainMessage(0), delayMillis);  
            }  
          };  

アクティビティのonCreate()(または任意のボタンのonClick()で、遅延を開始する場合は常に)で、呼び出しmRedrawHandler.sleep(3000); , drawPath();は描画を開始するメソッドです。

于 2012-04-07T15:18:11.920 に答える
0

新しいスレッドを生成した後、コードは制御を取り戻し、実行を継続します。追加のスレッドは、元のスレッドではなく待機しています。

于 2012-04-07T13:33:38.913 に答える
0

アンドロイド活動の遅延のため

      import android.os.Handler;

コードメインで

  new Handler().postDelayed(new Runnable() {
        @Override
        public void run() {
  
        }
    }, 5000);

しかし、上記のコードは廃止されました

次のコードを使用することをお勧めします

Javaに使用する

new Handler(Looper.getMainLooper()).postDelayed(new Runnable() {
    @Override
    public void run() {
        // Your Code
    }
}, 3000);

Kotlinに使用する

Handler(Looper.getMainLooper()).postDelayed({
        {
            //Your Code
        }
    }, 3000)
于 2020-11-19T07:41:02.940 に答える