В последнее время я часто сталкивался с этой ошибкой ... и это стало происходить только на Android 9.0 .Этот метод просто создает DatagramSocket
для соединения, которое я собираюсь использовать (на отдельном AsyncTask
)
private boolean initLink() {
Log.d(this.getClass().getName(), "initLink()");
try {
platformIPAddr = InetAddress.getByName(platformIPAddrStr);
socket = new DatagramSocket();
socket.setReuseAddress(true);
} catch (Throwable e) {
Log.e(this.getClass().getName(), e.getMessage());
e.printStackTrace();
return false;
}
return true;
}
Если при создании сокета произошла ошибка из-за какой-либо ошибки (т.е. искаженное значение на platformIPAddrStr
) исключение, выдаваемое системой:
android.os.NetworkOnMainThreadException
Хотя я бы / должен ожидать UnknownHostException
или SecurityException
.
class SendCommandTask extends AsyncTask {
@Override
protected Object doInBackground(Object[] objects) {
try {
sendCommands();
}
catch (Throwable e)
{
Log.e(this.getClass().getName(), e.getMessage());
}
return null;
}
}
И если вам интересно, если InitLink()
не удалось SendCommands()
не будет использовать сетевые ресурсы.