Я использую следующий фрагмент, чтобы проверить, доступна ли сеть, прежде чем я начну сетевое взаимодействие (профилактика лучше лечения?). Как только связь начнется, я могу только надеяться, что сеть останется доступной повсюду. Если нет, я бы поймал выброшенное исключение и отобразил бы сообщение пользователю.
public boolean isNetworkAvailable() {
Context context = getApplicationContext();
ConnectivityManager connectivity = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
if (connectivity == null) {
boitealerte(this.getString(R.string.alert),"getSystemService rend null");
} else {
NetworkInfo[] info = connectivity.getAllNetworkInfo();
if (info != null) {
for (int i = 0; i < info.length; i++) {
if (info[i].getState() == NetworkInfo.State.CONNECTED) {
return true;
}
}
}
}
return false;
}
Вы можете прикрепить DefaultThreadHandler к любому потоку, который будет использоваться, если какое-либо исключение останется необработанным в коде вызова исключения.
[РЕДАКТИРОВАТЬ: Добавление образца кода]
//attaching a Handler with a thread using the static function
Thread.setDefaultUncaughtExceptionHandler(handler);
//creating a Handler
private Thread.UncaughtExceptionHandler handler=
new Thread.UncaughtExceptionHandler() {
public void uncaughtException(Thread thread, Throwable ex) {
Log.e(TAG, "Uncaught exception", ex);
showDialog(ex);
}
};
void showDialog(Throwable t) {
AlertDialog.Builder builder=new AlertDialog.Builder(mContext);
builder
.setTitle("Exception")
.setMessage(t.toString())
.setPositiveButton("Okay", null)
.show();
}