【发布时间】:2017-12-10 21:18:49
【问题描述】:
我有一个应用必须在应用启动时从服务器下载几 MB (1MB - 10MB) 的数据。
问题在于应用:
在开始下载之前不显示主
TextView(屏幕保持黑色)或多或少没有反应
代码如下:
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
DoIt();
}
private void DoIt() {
HttpClient httpClient = new DefaultHttpClient();
TextView tv = (TextView)findViewById(R.id.textView);
tv.setText("Starting app...");
try {
for (int i=1; i<100; i++) {
HttpPost request2 = new HttpPost("http://192.168.1.12:3000/bytes/data" + i);
HttpResponse response2 = httpClient.execute(request2);
// Do something with data. In some cases, it has to download 1MB data
}
}
// catch + finally ...
}
}
如何防止应用无响应?
【问题讨论】:
-
您应该使用后台线程来执行网络操作。 developer.android.com/training/articles/perf-anr.html
-
@codeMagic 好的,但是,为什么
tv.setText("Starting app...");不显示? (它应该在下载开始之前显示)。 -
按照@codeMagic 所说的去做,你就会得到文本集。您可以使用 AsynTask 轻松完成。
-
tv.setText("Starting app...");没有显示,因为在您陷入主线程之前,用户界面还没有机会更新。 -
@Cristian 任何代码示例说明您将如何做到这一点?