[英]Create New Thread - Android
我正在嘗試實現一個循環程序,以便可以創建一個線程來將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);
}
}
還有一個問題,我是否要在這里或實際將信息發送到數據庫的類中添加循環程序? 它使用HTTP Post發送到將信息添加到MySQL數據庫的PHP程序。
我很想在這里嘗試其他策略。 Android有一個名為AsynTask
的類,旨在減輕開發人員在線程上完成工作的負擔。
通過AsyncTask,可以正確,輕松地使用UI線程。 此類允許執行后台操作並在UI線程上發布結果,而無需操縱線程和/或處理程序。
在寫入數據庫並將數據發送回服務器方面,我將考慮使用Service
,但是請記住,唯一不在UI線程上本地運行的Service是IntentService
您應該考慮對此類操作使用AsyncTask
類,它非常易於使用,並且提供了與UI線程同步的簡單方法。 這是一篇有關Android線程的不錯的文章,您可以在Android文檔中了解有關AsyncTask
更多信息。 希望這可以幫助。
您無法從自定義線程訪問“上下文”或任何UI對象。 這是因為它們是在主UI線程中創建的,因此您無法從線程訪問這些對象。
就像Martyn所說的那樣,您需要創建一個AsyncTask或使用Handlers訪問上下文/ ui。
就您而言,請選擇AsyncTask
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.