我想知道Activity绑定到服务的最佳位置是什么?我看到的例子在做onResume()和也onCreate().我问自己这是不是一个问题onCreate(),因为onPause()我会对服务进行解除绑定,所以如果我离开活动,我就不会得到serviceConnectionLeak.现在,如果我按下主页按钮然后切换到主屏幕,当我从任务管理器返回活动时,活动将取消绑定服务,然后onCreate()将不会被调用,如果代码试图访问某个功能从服务我将得到一个NullPointerException.如果我只绑定和取消绑定onResume(),onPause()我没有这个问题.我对吗?
基于我在此问过的上一个问题中的建议,我正在尝试将我的套接字连接推送到我已写入服务的应用程序中.昨天我花了大部分时间来研究服务,并且实际上嘲笑了一些(一个远程,一个本地).
我的问题分为两部分:
1)在玩过本地服务和远程服务之后,我仍然不确定哪一个最符合我的情况.这在很大程度上是因为我想我仍然不太明白在另一个"过程"中运行的优势会给我什么.我正在为套接字连接生成一个新线程,无论如何我都不会与UI有任何线程争用.那么将服务放在另一个流程中能让我做到什么呢?我可能会以这种方式看到更好的表现吗?我有限的理解是,通过将其置于不同的过程中,该服务将独立于我在我的应用程序上运行的任何活动而运行.我确实有一些不同的活动,但只有其中一个需要套接字连接,无论如何每次打开活动时我都会重建.
2)我将在我的服务中为我从服务器传递的任何新数据中的套接字"监听器"(DataInputStream().readLine()).在我昨天玩的游戏之后,我无法弄清楚如何在"实时"中将它读取的数据传递给实际的"客户端"(由远程服务绑定客户端,或本地客户端本身).
非常感谢第1部分的一些建议,以及第2部分的一些帮助(代码示例?:))
TIA
编辑:添加了我的服务代码 - 使用本地服务
服务类别:
public class SocketService extends Service {
Socket s;
PrintStream os;
@Override
public IBinder onBind(Intent arg0) {
// TODO Auto-generated method stub
return myBinder;
}
private final IBinder myBinder = new LocalBinder();
public class LocalBinder extends Binder {
public SocketService getService() {
return SocketService.this;
}
}
@Override
public void onCreate() {
super.onCreate();
s = new Socket();
}
public void IsBoundable(){
Toast.makeText(this,"I bind like butter", Toast.LENGTH_LONG).show();
}
public void onStart(Intent intent, int …Run Code Online (Sandbox Code Playgroud)