2012-02-28 85 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