如何在Android中与正在运行的线程通信服务
我的目标是提供一种能够满足所有应用程序网络需求的服务 我想也许可以打开两个插座进行数据传输。我希望数据以异步方式处理,所以我想我应该在两个独立的线程中运行它们,每个线程对应每个套接字,这样数据就可以在两个不同的异步“链接”中传输 因此,我希望有两件事:如何在Android中与正在运行的线程通信服务,android,multithreading,service,communication,Android,Multithreading,Service,Communication,我的目标是提供一种能够满足所有应用程序网络需求的服务 我想也许可以打开两个插座进行数据传输。我希望数据以异步方式处理,所以我想我应该在两个独立的线程中运行它们,每个线程对应每个套接字,这样数据就可以在两个不同的异步“链接”中传输 因此,我希望有两件事: 更好的整体设计。也许我完全搞错了 有人能向我解释一下,一旦我需要向主服务传递数据,我如何与这些THRED进行通信?据我所知(操作系统),我需要使用信号:)(只是开玩笑而已) 这篇文章很好地解释了线程和使用处理程序的通信。同样,同一个博客也有许多关
另一种可能是使用异步任务。找到一些解释好吧,我可以说我终于明白了,就在放弃之前。这是一个超级duper极其简单的应用程序,它在活动中运行一个线程,并为每个实体使用两个不同的处理程序处理双向通信 守则:
public class MainActivity extends Activity {
//Properties:
private final String TAG = "Activity"; //Log tag
private MyThread mThread; //spawned thread
Bundle myB = new Bundle(); //used for creating the msgs
public Handler mHandler = new Handler(){ //handles the INcoming msgs
@Override public void handleMessage(Message msg)
{
myB = msg.getData();
Log.i(TAG, "Handler got message"+ myB.getInt("THREAD DELIVERY"));
}
};
//Methods:
//--------------------------
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mThread = new MyThread(mHandler);
mThread.start();
sendMsgToThread();
}
//--------------------------
void sendMsgToThread()
{
Message msg = mThread.getHandler().obtainMessage();
myB.putInt("MAIN DELIVERY", 321);
msg.setData(myB);
mThread.getHandler().sendMessage(msg);
}
}
//=========================================================================================
//=========================================================================================
public class MyThread extends Thread{
//Properties:
private final String TAG = "MyThread"; //Log tag
private Handler outHandler; //handles the OUTgoing msgs
Bundle myB = new Bundle(); //used for creating the msgs
private Handler inHandler = new Handler(){ //handles the INcoming msgs
@Override public void handleMessage(Message msg)
{
myB = msg.getData();
Log.i(TAG, "Handler got message"+ myB.getInt("MAIN DELIVERY"));
}
};
//Methods:
//--------------------------
public void run(){
sendMsgToMainThread(); //send to the main activity a msg
Looper.prepare();
Looper.loop();
//after this line nothing happens because of the LOOP!
Log.i(TAG, "Lost message");
}
//--------------------------
public MyThread(Handler mHandler) {
//C-tor that get a reference object to the MainActivity handler.
//this is how we know to whom we need to connect with.
outHandler = mHandler;
}
//--------------------------
public Handler getHandler(){
//a Get method which return the handler which This Thread is connected with.
return inHandler;
}
//--------------------------
private void sendMsgToMainThread(){
Message msg = outHandler.obtainMessage();
myB.putInt("THREAD DELIVERY", 123);
msg.setData(myB);
outHandler.sendMessage(msg);
}
}
//=========================================================================================
//=========================================================================================
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="test.test.namespace"
android:versionCode="1"
android:versionName="1.0" >
<uses-sdk android:minSdkVersion="10" />
<application android:icon="@drawable/icon" android:label="@string/app_name">
<activity android:name=".MainActivity" android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
我在阅读endian提供的帖子时发现了这一点
我希望其他人会觉得这很有用。祝你好运:)看起来不错。我会看一看,但我确信它掩盖了我需要的一切。10倍!:)嗯,这确实有帮助,但我开始质疑我的孔设计。我将发布另一个关于它的问题。我仍然很困惑。我找不到在服务和线程之间异步传递数据的方法。请使用classi处理程序遵循第一个教程。我仍然不明白线程如何将他的答案发送回主活动。它只显示如何从主活动发送消息:mHandler.sendMessage(msg);在这里找到了一个非常简单简洁的示例:。据我所知,这是一种单向通信,而我正在寻找双向通信。这里的主要问题是,我无法以纯异步方式将MSG发送到活动。这样,如果线程\活动繁忙,MSG可能会丢失。建议?
01-26 06:25:40.683: I/Activity(19560): Handler got message123
01-26 06:25:40.683: I/MyThread(19560): Handler got message321