android高级开发必会系列

60 阅读4分钟

-1 跨进程通讯效果,回调效果:回调效果-liveEventBus 0 约束性布局必须会!谷歌新推出的扁平化布局,能有效避免布局嵌套过深的问题 1必须学会代码动态添加view,而不是只会在xml中写死布局 2Parcelable接口实现必须会 3Canvas用法,自定义view必会canvas用法 4必须会熟练使用retrofit2 5架构的演进: mvc:Activity或Fragment既是View的角色也是Controller的角色,就导致Activity的承载过重,View和Controller耦合在一起,随着业务的增多,牵一发而动全身,Activity变得臃肿不堪,代码难以扩展和维护。 mvp:presenter把moudle和View完全隔离,通过接口回调的方式进行数据传递;不足之处就是会增加很多接口类文件,不可避免的增加许多空实现。 白话:我看mvc的直观体验就是网络请求跟view显示都在activity里面;mvp就是把网络请求从activity里面抽出去了,通过接口回调的方式在activity里面用,抽象的能力,代码看起来不要那么直接,一堆,充分利用接口回调的作用。 下面为mvc:Activity一大堆

MVVM:是数据驱动UI的思想,是Google目前最为推荐的一种方式,为此Google还开源了JetPack系列组件来支持MVVM.

6官方文档,闲没事就看看 官方文档 7设计模式的运用,理解;工厂,单例,责任链,装饰者等等 8 设计原则:单一职责,开闭原则,里氏替换,依赖倒置,接口隔离等等的运用理解 9 共性的东西一定要封装成工具类,一改全改,比如:吐司工具类,Dailog工具类,标题栏工具类,统一日志类(日志上传服务端也很重要)等等(重要) 牛逼日志类 调用

TLog.e("wy", "heightForScroll:" + heightForScroll); 1 效果

E/wy: YibeiHomeActivity.java (389) onCreate: heightForScroll:1128 1 内容:

import android.util.Log; //YibeiHomeActivity.java (389) onCreate: heightForScroll:1128 这个工具类强大,能定位具体的类,行数等 public class TLog { /** * This flag to indicate the log is enabled or disabled. */ private static boolean isLogEnable = true;

/**
 * Disable the log output.
 */
public static void disableLog() {
    isLogEnable = false;
}

/**
 * Enable the log output.
 */
public static void enableLog() {
    isLogEnable = true;
}

/**
 * Debug
 *
 * @param tag
 * @param msg
 */
public static void d(String tag, String msg) {
    if (isLogEnable) {
        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
        Log.d(tag, rebuildMsg(stackTraceElement, msg));
    }
}

/**
 * Information
 *
 * @param tag
 * @param msg
 */
public static void i(String tag, String msg) {
    if (isLogEnable) {
        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
        Log.i(tag, rebuildMsg(stackTraceElement, msg));
    }
}

/**
 * Verbose
 *
 * @param tag
 * @param msg
 */
public static void v(String tag, String msg) {
    if (isLogEnable) {
        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
        Log.v(tag, rebuildMsg(stackTraceElement, msg));
    }
}

/**
 * Warning
 *
 * @param tag
 * @param msg
 */
public static void w(String tag, String msg) {
    if (isLogEnable) {
        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
        Log.w(tag, rebuildMsg(stackTraceElement, msg));
    }
}

/**
 * Error
 *
 * @param tag
 * @param msg
 */
public static void e(String tag, String msg) {
    if (isLogEnable) {
        StackTraceElement stackTraceElement = Thread.currentThread().getStackTrace()[3];
        Log.e(tag, rebuildMsg(stackTraceElement, msg));
    }
}

/**
 * Rebuild Log Msg
 *
 * @param msg
 * @return
 */
private static String rebuildMsg(StackTraceElement stackTraceElement, String msg) {
    StringBuffer sb = new StringBuffer();
    sb.append(stackTraceElement.getFileName());
    sb.append(" (");
    sb.append(stackTraceElement.getLineNumber());
    sb.append(") ");
    sb.append(stackTraceElement.getMethodName());
    sb.append(": ");
    sb.append(msg);
    return sb.toString();
}

}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 腾讯云toast工具类

public class ToastUtil {

private static Toast toast;

public static void toastLongMessage(final String message) {
    toastMessage(message, true);
}

public static void toastShortMessage(final String message) {
    toastMessage(message, false);
}

private static void toastMessage(final String message, boolean isLong) {
    BackgroundTasks.getInstance().runOnUiThread(new Runnable() {
        @Override
        public void run() {
            if (toast != null) {
                toast.cancel();
                toast = null;
            }
            toast = Toast.makeText(TUIConfig.getAppContext(), message,
                    isLong ? Toast.LENGTH_LONG : Toast.LENGTH_SHORT);
            // 解决各个手机系统 toast 文字对齐方式不一致的问题
            View view = toast.getView();
            TextView textView = view.findViewById(android.R.id.message);
            if (textView != null) {
                textView.setGravity(Gravity.CENTER);
            }
            toast.show();
        }
    });
}

}

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 10 优秀三方框架的运用,如xpopup,glide等等 11 常用组件的使用,如Fragment必会;常用控件的组合使用,如TableLayout+ViewPager,TableLayout+FrameLayout等等必会;MediaPlayer的使用,SurfaceView的使用等等;相机的调用,相册的调用,动态鉴权,自动升级等等 ———————————————— 版权声明:本文为CSDN博主「xiyangyang8110」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:blog.csdn.net/xiyangyang8…