【问题标题】:Create New Thread - Android创建新线程 - Android
【发布时间】:2012-03-18 00:40:37
【问题描述】:

我正在尝试实现一个循环器,以便创建一个线程来将 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 发送到 PHP 程序,该程序将信息添加到 MySQL 数据库。

【问题讨论】:

    标签: java android multithreading gps looper


    【解决方案1】:

    我很想在这里尝试不同的策略。 Android 有一个名为AsynTask 的类,旨在减轻开发人员在线程上卸载工作的负担。

    AsyncTask 允许正确且轻松地使用 UI 线程。此类允许在 UI 线程上执行后台操作并发布结果,而无需操作线程和/或处理程序。

    在写入数据库并将数据发送回服务器方面,我会考虑使用 Service,但请记住,唯一不在 UI 线程上本地运行的服务是 IntentService

    【讨论】:

      【解决方案2】:

      您应该考虑使用AsyncTask 类进行此类操作,它非常易于使用,并且它提供了一种与UI 线程同步的简单方法。 Here's 一篇关于 Android 线程的好文章,您可以在 Android 文档中了解更多关于 AsyncTask 的信息。希望这会有所帮助。

      【讨论】:

        【解决方案3】:

        您无法从自定义线程访问“上下文”或任何 UI 对象。这是因为这些是在主 UI 线程中创建的,您无法从线程中访问这些对象。

        正如 Martyn 所说,你需要创建一个 AsyncTask 或者使用 Handlers 来访问 context/ui。

        在你的情况下,选择 AsyncTask

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2020-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-07-19
          • 2011-12-30
          • 1970-01-01
          相关资源
          最近更新 更多