簡體   English   中英

創建新線程-Android

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM