我是android编程的新手,所以我的问题是基本的。 我需要使用后台进程进行应用程序,不断发送一些数据(从BT获取)。想法是即使应用程序处于后台或关闭,通信也应该有效。
我想我需要扩展IntentService
而不是创建工作线程。比如当我需要向工作线程发送命令时,我应该在intent中使用其他参数启动intent服务,然后将消息发送到工作线程。
我尝试这样做,我遇到了从onHandleIntent()
发送邮件的问题。
所以我的问题是:具有此类任务的应用程序的适当模型是什么?可能你知道可能会看到哪些例子?看起来我做了很常见的事情,但我找不到回答我问题的例子。
UPD:我做了原型工作。这是实现IntentService
和工作线程的最佳方式吗?
公共类WorkIntentService扩展了IntentService {
public static final String TAG = WorkerThread.class.getSimpleName();
public static final String ACTION_START = TAG + "[action_start]";
public static final String ACTION_STOP = TAG + "[action_stop]";
public static final String MSG_STOP = TAG + "[message_stop]";
public WorkIntentService() {
super("WorkIntentService");
workerThread = null;
}
WorkerThread workerThread;
@Override
protected void onHandleIntent(Intent intent) {
if (intent != null) {
String sAction = intent.getAction();
if(sAction == ACTION_START){
if(workerThread == null) {
workerThread = new WorkerThread();
workerThread.start();
}
}
else if(sAction == ACTION_STOP){
if(workerThread == null) {
LocalBroadcastManager.getInstance(null)
.sendBroadcast(new Intent(MSG_STOP));
}
}
}
}
private static int nCounter = 0;
private static long TIMEOUT = 1000;
private class WorkerThread extends Thread{
long lCounter;
public boolean bRun;
public void run() {
lCounter = System.currentTimeMillis();
bRun = true;
LocalBroadcastManager.getInstance(WorkIntentService.this).registerReceiver(
new BroadcastReceiver() {
@Override
public void onReceive(Context context, Intent intent) {
bRun = false;
}
}, new IntentFilter(MSG_STOP));
while (bRun){
if( System.currentTimeMillis() - lCounter > TIMEOUT ){
lCounter = System.currentTimeMillis();
Log.i(TAG, "next #" + Integer.toString(nCounter++));
}
}
}
}
}