2012-02-28 128 views
0

我想實現一個活套,所以我可以創建一個線程來發送GPS座標到數據庫。我是Java新手,這一切都很令人困惑,但也許你可以提供幫助。按下按鈕時,主活動會調用以下類方法。該方法找到GPS位置,然後將其發送到另一個類的方法,將緯度和經度(以及用戶標識)發送到數據庫。我遇到的問題是我的應用程序有時會慢下來並凍結,所以看起來我需要實現某種方式來爲此過程創建一個新線程。有任何想法嗎。我是一個小菜館,所以要溫柔。這裏是我的代碼:其他創建新主題 - 安卓

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); 
    } 
} 

一個問題,我想補充的尺蠖在這裏或在實際將信息發送到數據庫中的類?它使用HTTP Post發送到PHP程序,該程序將信息添加到MySQL數據庫。

回答

4

我會試着在這裏嘗試一種不同的策略。 Android有一個名爲AsynTask的類,它可以減輕開發人員在線程上完成卸載工作的負擔。

AsyncTask支持正確和方便地使用UI線程。該類允許執行後臺操作並在UI線程上發佈結果,而無需操縱線程和/或處理程序。

以書面形式向DB和數據發送回服務器方面,我想看看使用Service,但請記住,這並不原生UI線程上運行的唯一服務就是IntentService

1

您應該考慮使用AsyncTask類進行此類操作,它使用起來相當簡單,它提供了一種與UI線程同步的簡單方法。 Here's關於Android線程的一個不錯的帖子,您可以在Android文檔中瞭解有關AsyncTask的更多信息。希望這可以幫助。

0

您無法從自定義線程訪問「上下文」或任何UI對象。這是因爲這些是在主UI線程中完成的,並且您無法從線程訪問這些對象。就像馬丁說的,你需要創建一個AsyncTask或使用Handlers來訪問context/ui。

在你的情況,去AsyncTask