【发布时间】:2023-03-14 23:02:02
【问题描述】:
我正在尝试使用从OnStart 方法调用的此方法检查connectivity(WIFI or cellular) 到internet:
public static Boolean isInternetConn(Context ctx){
ConnectivityManager connec = (ConnectivityManager) ctx.getSystemService(Context.CONNECTIVITY_SERVICE);
android.net.NetworkInfo wifi = connec.getNetworkInfo(ConnectivityManager.TYPE_WIFI);
android.net.NetworkInfo mobile = connec.getNetworkInfo(ConnectivityManager.TYPE_MOBILE);
boolean connected= false;
if((wifi != null && wifi.isConnectedOrConnecting()) || (mobile != null && mobile.isConnectedOrConnecting())){
try {
StrictMode.ThreadPolicy policy = new StrictMode.ThreadPolicy.Builder().permitAll().build();
StrictMode.setThreadPolicy(policy);
URL myurl = new URL("http://www.google.com");
URLConnection connection;
connection = myurl.openConnection();
connection.setConnectTimeout(2000);
connection.setReadTimeout(2000);
HttpURLConnection httpConnection = (HttpURLConnection) connection;
int responseCode = -1;
responseCode = httpConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
connected = true;
httpConnection.disconnect();
}
else {
httpConnection.disconnect();
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
return connected;
}
如果网络信号低,该方法会挂起 UI,有时 UI 会变黑。 我已将超时配置为较低的值,但问题仍然存在。 是否建议在 Async Task 中执行此任务?
谢谢
【问题讨论】:
-
使用带有进度条的处理程序.....你正在中断主 UI 线程
-
所有长度操作都应该在主线程之外完成。 AsyncTask 提供了这样的类。推荐
AsyncTask,这里没有什么好推荐的。如果它是在 UI 上完成的任务,则意味着您必须使用 Thread 类或专门化类。 Android 提供了这样一个名为AsyncTask的专门类
标签: android exception wifi httpconnection