我有这个代码用于android打开一个网址,但我不能让它在后台运行。可能吗? 有人可以帮我弄这个吗?感谢。
public void goToSu (View view) {
goToUrl("http://192.168.2.66/index.html?o0=0");
}
private void goToUrl (String url) {
Uri uriUrl = Uri.parse(url);
Intent background = new Intent(Intent.ACTION_VIEW, uriUrl);
startActivity(background);
}
答案 0 :(得分:1)
您无法在主UI中进行网络操作,因为这会阻止您的程序执行,并为您的用户带来非常恶心的体验。为此,如果您刚刚开始使用线程世界,则必须将Thread
内的网络操作分开,或者更好,将AsyncTask
分开。
这是您将使用的结构:
final class MyNetworkOperation extends AsyncTask<URL, Integer, Void> {
@Override
protected void onPreExecute(final Void param) {
...
}
@Override
protected Void doInBackground(final URL... args) {
...
return null;
}
@Override
protected void onPostExecute(final Void param) {
...
}
}
即使是方法名称也非常自我解释。当您定义AsyncTask并在其上调用.execute(url_object)
时,第一个被调用的方法将是.onPreExecute()
,您可以在那里初始化变量并为您要执行的网络操作准备一切。网络操作的 hard 部分应在doInBackground()
内完成。在那里你连接,进行数据传输并断开与主机的连接。最后,调用onPostExecute()
:完成后,您可以在此处理结果(将其传输到主Activity,显示对话框等)。
有关AsyncTasks的更多信息(并了解这些参数的含义),我强烈建议您阅读reference。
可能会找到一个很好的例子here。