在异步任务中使用命中api有什么用?

时间:2014-11-27 09:17:51

标签: android

我们可以在没有异步的情况下使用Httpget / Httppost吗?

 HttpClient client = new DefaultHttpClient();
    HttpGet request = new HttpGet("http://www.example.com"); 

如果我没有使用异步,则会出现威胁错误。

3 个答案:

答案 0 :(得分:0)

因为交互可能需要很长时间才能得到答案,所以你不能使用主线程,因为这是你如何停止应用程序的活动(所有操作同步),如果确实发生这种情况,你将收到ANR。 因此,任何需要为后台线程设置时间的操作,如果你想在完成后处理数据后的后台线程可以将信息传递给主线程。

答案 1 :(得分:0)

正如其他人所解释的那样,理想情况下,您不应该在主线程上执行网络操作,因为这会使UI在网络操作完成之前无法使用,因此反过来会导致应用程序无响应错误。 但如果您仍然需要它,您可以随时使用

禁用Strictmode
 StrictMode.setThreadPolicy(StrictMode.ThreadPolicy.LAX);

答案 2 :(得分:0)

由于在主线程上执行了任何繁重的任务,因此发生此异常。如果执行任务花费太多时间,则可能会出现错误。要处理此问题,我们必须使用额外的线程来运行此类代码。 不需要在AsyncTask中运行代码,但是网络操作应该在这样的线程中。但AsyncTask对于这种类型的操作来说是更好的选择,所以每个人都建议。

Thread thread = new Thread(new Runnable(){
    @Override
    public void run() {
        try {
            //Your code goes here
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
});

thread.start();

您还可以使用以下

更改默认行为
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();

StrictMode.setThreadPolicy(policy);