我有一个主要活动启动: 1.-写入套接字的易于网络的线程。 2.-应该从套接字读取的网络倾向服务。 到目前为止,我已完成1.但我希望从套接字读取的信息显示在主要活动中。我知道我可以使用附加功能在活动和服务之间传递信息,但是如何告诉活动更新并获取新数据?
答案 0 :(得分:1)
我猜您可以在主要活动中使用广播意图和BroadcastReceiver,以实现后台通信。
这是一个可以实现此目的的片段。
(活动中的代码):
class MyActivity extends Activity{
CustomEventReceiver mReceiver=new CustomEventReceiver();
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
/*YOUR ONCREATE CODE HERE*/
/*Set up filters for broadcast receiver so that your reciver
can only receive what you want it to receive*/
IntentFilter filter = new IntentFilter();
filter.addAction(CustomEventReceiver.ACTION_MSG_CUSTOM1);
filter.addCategory(Intent.CATEGORY_DEFAULT);
registerReceiver(mReceiver, filter);
}
@Override
public void onDestroy(){
super.onDestroy();
/*YOUR DESTROY CODE HERE*/
unregisterReceiver(mReceiver);
}
/*YOUR CURRENT ACTIVITY OTHER CODE HERE, WHATEVER IT IS*/
public class CustomEventReceiver extends BroadcastReceiver{
public static final String ACTION_MSG_CUSTOM1 = "yourproject.action.MSG_CUSTOM1";
@Override
public void onReceive(Context context, Intent intent){
if(intent.getAction().equals(ACTION_MSG_CUSTOM1)){
/*Fetch your extras here from the intent
and update your activity here.
Everything will be done in the UI thread*/
}
}
}
}
然后,在你的服务中,你只需播放一个意图(带有你需要的任何额外内容)......用这样的话说:
Intent tmpIntent = new Intent();
tmpIntent.setAction(CustomEventReceiver.ACTION_MSG_CUSTOM1);
tmpIntent.setCategory(Intent.CATEGORY_DEFAULT);
/*put your extras here, with tmpIntent.putExtra(..., ...)*/
sendBroadcast(tmpIntent);
答案 1 :(得分:0)
一个选项可能是将套接字读取器的输出写入流 - 例如存储在应用程序内部存储中的文件,然后定期在活动线程中轮询该文件。