如何在android中创建多线程?

时间:2011-04-01 18:16:32

标签: android multithreading sms

我是android新手,我正在做一些可能会使用的应用程序 多线程。 例如,应用程序线程可能如下所示,假设为2 线程;

线程1 即使整个应用程序在前台线程上运行也应如此 在任何时候都听着特定的短信; 想象一下,当发送此消息时,截获的短信是“3456” 到手机然后第一个线程将被暂停 和线程2将被激活:

线程2 当线程被激活时,它将使用gps来跟踪位置 的电话,将使用smsManager的实例发回 手机的坐标(日志,纬度),甚至可能谷歌地图回来 发送消息“3456”然后线程1的电话 激活:

* *如何实现这一点?

2 个答案:

答案 0 :(得分:8)

这个问题有两个答案。

  1. 如果您想长时间在后台运行一个帖子,要监听事件或运行常规流程,那么Services就可以了

  2. 如果您需要触发新线程进行一次处理然后停止,那么请查看AsyncTask,这是一种非常非常简单的方法,并且包含一种更新用户界面的简单方法在此过程中。

  3. 开发者文档包含一个关于location in Android

    的精彩页面

    这是一些information about receiving SMS in your app

答案 1 :(得分:2)

查看服务。如果您在应用程序中使用服务,则不必对其进行明确编码。

http://developer.android.com/reference/android/app/Service.html

修改

回应评论,以下是我如何使用BroadcastReceiver进行从服务到活动的通信

public class SomeActivity extends Activity {

BroadcastReceiver receiver = new BroadcastReceiver() {

    @Override
    public void onReceive(Context context, Intent intent) {

        // Example of pulling a string out of the Intent's "extras"
        String msg = intent.getStringExtra("BroadcastString");

        // ...more stuff

    }
};


@Override
public void onResume()
{
    super.onResume();
    registerReceiver(receiver, new IntentFilter("SomeStringKeyForMyBroadcast"));

    // ... other stuff
}

@Override
public void onPause()
{
    super.onPause();
    unregisterReceiver(receiver);

    // ... other stuff
}

并在我的服务中......

public class SomeService extends Service {

Intent broadcastIntent = new Intent("SomeStringKeyForMyBroadcast");

private void someWorkerMethodInMyService()
{
        // ... other stuff

        broadcastIntent.putExtra("BroadcastString", "Some Data");
        sendBroadcast(broadcastIntent);

        // ... other stuff
}

类似的......