为了简单说明套接字编程在Android平台中是如何工作的,我想开发一个没有thread / asyntask的简单套接字程序,并且(如果可能的话)也没有异常捕获。那可能吗?我已经尝试但它不起作用(正如许多其他人指出的那样,套接字最好在其他线程上运行)。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
tv = (TextView) findViewById(R.id.TextView01);
tv.setText("Nothing from client yet");
}
public Void handleOnClick(View v) {
Socket s = null;
try {
ss = new ServerSocket(SERVERPORT);
} catch (IOException e) {
e.printStackTrace();
}
try {
s = ss.accept();
BufferedReader input = new BufferedReader(
new InputStreamReader(s.getInputStream()));
String st = null;
st = input.readLine();
mClientMsg = st;
} catch (IOException e) {
e.printStackTrace();
}
}
答案 0 :(得分:0)
你可以在不使用AsyncTask的情况下开发任何东西,但我绝对不推荐它,因为你的应用程序会阻塞,直到任务完成(因为我确定你已经知道)!在这种情况下,您的套接字需要足够快地响应,以便操作系统不会终止您的流程(请参阅ANR here上的讨论。)
您必须在某个时刻处理例外情况。你能做的最好的事情就是让你的方法抛出异常并在调用方法的任何地方处理它们,但这并不意味着你不必处理它们;这只会延迟他们。
public Void handleOnClick(View v) throws IOException {
Socket s = null;
ss = new ServerSocket(SERVERPORT);
s = ss.accept();
BufferedReader input = new BufferedReader(
new InputStreamReader(s.getInputStream()));
String st = null;
st = input.readLine();
mClientMsg = st;
}
如果这是其他人的一个示例或演示,它应该结构合理,以便人们学会正确地做事。我强烈建议您考虑处理应该处理它们的异常(或者在链上抛出更有意义的异常)。此外,如果您正在教授一个班级或个人这些事情,您应该在某个时刻证明如何避免被ANR打耳光。