我的单身网络对象:
public class Communication implements Runnable{
private static Communication mInstance = null;
private BufferedOutputStream socketOutput = null;
private PrintWriter printOut = null;
private Socket socket = null;
private Scanner reader = null;
public static Communication getInstance(){
if(mInstance == null)
{
mInstance = new Communication();
}
return mInstance;
}
public void login()
{ //login functionality
}
public void run()
{
//connect to server using loopback address
try{
socket = new Socket("192.168.0.3", 4242);
//set inputs and out puts
socketOutput = new BufferedOutputStream(socket.getOutputStream());
printOut = new PrintWriter(socket.getOutputStream(), true);
reader = new Scanner(socket.getInputStream());
}
catch( UnknownHostException uhe){
uhe.printStackTrace();
}
catch( IOException ex){
ex.printStackTrace();
}
}
}
我想要实例化此对象的MainActivity
public class MainActivity extends ActionBarActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
new Thread(Communication.getInstance()).start();
}
}
那部分工作正常。我在新线程中实例化通信对象并建立连接。现在我想从另一个活动访问该对象,除非我再次在新线程中执行getInstance(),否则我会收到NetworkOnMainThread异常。
这是否意味着每次我想使用我的网络对象时我都要开始一个新线程?
如果(1)是肯定的: 如何从主线程访问Communication.getInstance()。login()的返回值并将其放在视图对象中?