ExceptionUtil

public class ExceptionUtil {
public static void handleException(Throwable throwable){

if(MyApplication.isRelease){
//把异常信息转成字符串
StringWriter stringWriter = new StringWriter();
PrintWriter printWriter = new PrintWriter(stringWriter);
throwable.printStackTrace(printWriter);
String str = stringWriter.toString();
//联网发送

}else {
//开发阶段
ExceptionUtil.handleException(throwable);
}
}
}

其中MyApplication.isRelease是定义在MyApplication中的变量,用来表示是否是发布版本,在真正发布时,置为true

//release:发布版本
public static boolean isRelease = false;

LogUtil

Log输出也不能随便用,耗时,可以通过两个栗子看一下

long start = System.currentTimeMillis();
int sum = 0;
for(int i=0;i<10000;i++){
sum++;
}
long end = System.currentTimeMillis() - start;
Log.i("TIME",sum+" 用时:"+end);

I/TIME: 10000 用时:1

long start = System.currentTimeMillis();
int sum = 0;
for(int i=0;i<10000;i++){
sum++;
Log.i("TIME",sum+" 用时:"+ (System.currentTimeMillis() - start));
}

I/TIME: 9998 用时:201
I/TIME: 9999 用时:201
I/TIME: 10000 用时:201

因此我们写一个LogUtil

public class LogUtil {
public static void i(String tag,Object msg){
if(MyApplication.isRelease){
//真机上不打印日志
return;
}else {
Log.d(tag,String.valueOf(msg));
}
}
}

Toast

在工作中应该新建一个toast方法,以便统一修改toast样式

public static void showInfo(Context context, String msg){
.....
}

其他toast教程:​​Android自定义Toast的时长、位置、及显示的View​

NetworkUtil

【达内课程】异常处理工具类、Log打印工具类、网络变化工具类_android
添加权限

<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

NetworkUtil

public class NetworkUtil {
public static void checkNetworkState(final Activity activity){
//判断有没有网
ConnectivityManager manager = (ConnectivityManager)activity.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo networkInfo = manager.getActiveNetworkInfo();
//没有活动网络
if(networkInfo == null){
final AlertDialog.Builder builder = new AlertDialog.Builder(activity);
builder.setMessage("没网");
builder.setPositiveButton("打开网络", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intent = new Intent(Settings.ACTION_WIRELESS_SETTINGS);
activity.startActivity(intent);
}
});

builder.setNegativeButton("取消", null);
builder.show();
}
}
}

使用时在onCreate()中

NetworkUtil.checkNetworkState(this);

NetworkStateChangeReceiver

NetworkStateChangeReceiver

public class NetworkStateChangeReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
NetworkUtil.checkNetworkType(context);
}
}

AndroidManifest中注册

<receiver android:name=".util.NetworkStateChangeReceiver">
<intent-filter>
<action android:name="android.net.conn.CONNECTIVITY_CHANGE"/>
</intent-filter>
</receiver>

MyApplication

public class MyApplication extends Application {
public static boolean networkIsClose = false;
public static boolean networkIsMobile = false;
public static boolean networkIsWifi = false;
......
@Override
public void onCreate() {
super.onCreate();
//得网络状态
NetworkUtil.checkNetworkType(this);

......
}
}

NetworkUtil中增加方法

public static void checkNetworkType(Context context) {
//判断用户是开网还是关网
ConnectivityManager manager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo info = manager.getActiveNetworkInfo();
if (info == null) {
//关网
MyApplication.networkIsClose = true;
MyApplication.networkIsWifi = false;
MyApplication.networkIsMobile = false;
LogUtil.i("网络", "用户关闭了网络");
} else {
//用户开网
MyApplication.networkIsClose = false;
//判断网络类型
//移动网
NetworkInfo networkMobile = manager.getNetworkInfo(manager.TYPE_MOBILE);
if (networkMobile != null && networkMobile.isConnectedOrConnecting()) {
MyApplication.networkIsMobile = true;
LogUtil.i("网络", "用户打开了网络,网络类型是移动网");
}
//wifi
NetworkInfo networkWifi = manager.getNetworkInfo(manager.TYPE_WIFI);
if (networkWifi != null && networkWifi.isConnectedOrConnecting()) {
MyApplication.networkIsWifi = true;
LogUtil.i("网络", "用户打开了网络,网络类型是wifi");
}
}
}

​android.net.conn.CONNECTIVITY_CHANGE广播无法接收的问题​