runtime源码解析(runtime详解)
本文目录一览:
判断网络连接是否成功源码分享,一看就懂
以安卓为例:
利用Android自带的ConnectivityManager类。
有时候连上了wifi,但这个wifi是上不了网的,可以通过ping 百度网址来判断是否可以上网。
也可以利用get请求访问百度,如果get请求成功,说明可以上网。
判断网络是否已经连接
// check all network connect, WIFI or mobile
public static boolean isNetworkAvailable(final Context context) {
boolean hasWifoCon = false;
boolean hasMobileCon = false;
ConnectivityManager cm = (ConnectivityManager) context.getSystemService(context.CONNECTIVITY_SERVICE);
NetworkInfo[] netInfos = cm.getAllNetworkInfo();
for (NetworkInfo net : netInfos) {
String type = net.getTypeName();
if (type.equalsIgnoreCase("WIFI")) {
LevelLogUtils.getInstance().i(tag, "get Wifi connection");
if (net.isConnected()) {
hasWifoCon = true;
}
}
if (type.equalsIgnoreCase("MOBILE")) {
LevelLogUtils.getInstance().i(tag, "get Mobile connection");
if (net.isConnected()) {
hasMobileCon = true;
}
}
}
return hasWifoCon || hasMobileCon;
}
利用 ping 判断 Internet 能够 请求成功
// network available cannot ensure Internet is available
public static boolean isNetWorkAvailable(final Context context) {
Runtime runtime = Runtime.getRuntime();
try {
Process pingProcess = runtime.exec("/system/bin/ping -c 1 ");
int exitCode = pingProcess.waitFor();
return (exitCode == 0);
} catch (Exception e) {
e.printStackTrace();
}
return false;
}
源码里runtimeexception是什么意思
说到Exception和RuntimeException的区别,首先看一段代码,如下:
public class TestRuntimeException {
public static void main(String[] args) {
String str="123";
int temp=Integer.parseInt(str);
System.out.println(temp*temp);
}
}
我们来看看parseInt方法的源代码如下:
public static int parseInt(String s) throws NumberFormatException {
return parseInt(s,10);
}
我们发现这个方法中抛出了NumberFormatException异常,但是在上面的代码中我们没有找到try...catch来处理,这是为什么呢。按照我们异常处理的知识,如果一个方法通过throws抛出了异常,那么可以在抛出异常的方法中不适用try...catch,但是在调用这个方法的地方必须有try...catch来处理。可以发现NumberFormatException是RuntimeException的子类,那么这就需要我们清楚Exception和RuntimeException的概念:
Exception:在程序中必须使用try...catch进行处理。
RuntimeException:可以不使用try...catch进行处理,但是如果有异常产生,则异常将由JVM进行处理。
对于RuntimeException的子类最好也使用异常处理机制。虽然RuntimeException的异常可以不使用try...catch进行处理,但是如果一旦发生异常,则肯定会导致程序中断执行,所以,为了保证程序再出错后依然可以执行,在开发代码时最好使用try...catch的异常处理机制进行处理。
-
java ProcessBuilder和RunTime里面的环境变量具体是指什么?什么意思?
ProcessBuilder.start() 和 Runtime.exec() 方法都被用来创建一个操作系统进程(执行命令行操作),并返回 Process 子类的一个实例,该实例可用来控制进程状态并获得相关信息。
不同点:
ProcessBuilder.start() 和 Runtime.exec()传递的参数有所不同,Runtime.exec()可接受一个单独的字符串,这个字符串是通过空格来分隔可执行命令程序和参数的;也可以接受字符串数组参数。而ProcessBuilder的构造函数是一个字符串列表或者数组。列表中第一个参数是可执行命令程序,其他的是命令行执行是需要的参数。
通过查看JDK源码可知,Runtime.exec最终是通过调用ProcessBuilder来真正执行操作的。