-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…