android 开发不常用技巧集

1.删除app指定名数据库

context.deleteDatabase("name.db");

2.Application 监听所有activity生命周期,可实现统一添加返回按钮等操作

registerActivityLifecycleCallbacks(new ActivityLifecycleCallbacks() {
@Override
public void onActivityCreated(Activity activity, Bundle savedInstanceState) {
//这里全局给Activity设置toolbar和title,你想象力有多丰富,这里就有多强大,以前放到BaseActivity的操作都可以放到这里
if (activity.findViewById(R.id.toolbar) != null) { //找到 Toolbar 并且替换 Actionbar
if (activity instanceof AppCompatActivity) {
((AppCompatActivity) activity).setSupportActionBar((Toolbar) activity.findViewById(R.id.toolbar));
((AppCompatActivity) activity).getSupportActionBar().setDisplayShowTitleEnabled(false);
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
activity.setActionBar((android.widget.Toolbar) activity.findViewById(R.id.toolbar));
activity.getActionBar().setDisplayShowTitleEnabled(false);
}
}
}
if (activity.findViewById(R.id.toolbar_title) != null) { //找到 Toolbar 的标题栏并设置标题名
((TextView) activity.findViewById(R.id.toolbar_title)).setText(activity.getTitle());
}
if (activity.findViewById(R.id.toolbar_back) != null) { //找到 Toolbar 的返回按钮,并且设置点击事件,点击关闭这个 Activity
activity.findViewById(R.id.toolbar_back).setOnClickListener(v -> {
activity.onBackPressed();
});
}
}

...

});

3.通过View获取Activity.

public static @NonNull Activity getActivity(View view) {
  Context context = view.getContext();

  while (context instanceof ContextWrapper) {
  if (context instanceof Activity) {
    return (Activity) context;
  }
  context = ((ContextWrapper) context).getBaseContext();
}

throw new IllegalStateException("View " + view + " is not attached to an Activity");
}

4.通过Maven中央库添加第三方jar包的时候,出现了重复加载jar包的问题,解决办法很简单去掉一个不让它去加载就OK了。例如:

compile ('in.srain.cube:cube-sdk:1.0.42.1'){
   exclude module: 'support-v4'
}
compile ('com.taobao.android:alisdk-hotfix:2.0.9') {
exclude(module:'utdid4all')
}

3.将连接电脑的手机日志log保存到D:/log.txt
adb logcat -V time *:V > D:/log.txt  记录日志

 time *:V  过滤打印信息 时间 万能匹配符;V开头的信息

V — 明细 (最低优先级)

D — 调试

I — 信息

W — 警告

E — 错误

F — 严重错误

S — 无记载 (最高优先级,没有什么会被记载)

brief — 显示优先级/标记和原始进程的PID (默认格式)

process — 仅显示进程PID

tag — 仅显示优先级/标记

thread — 仅显示进程:线程和优先级/标记

raw — 显示原始的日志信息,没有其他的元数据字段

time — 显示日期,调用时间,优先级/标记,PID

long —显示所有的元数据字段并且用空行分隔消息内容

radio — 查看包含在无线/电话相关的缓冲区消息

events — 查看事件相关的消息

main — 查看主缓冲区 (默认缓冲区)

参考 http://blog.csdn.net/xyz_lmn/article/details/7004710

原文地址:https://www.cnblogs.com/xBig/p/6961450.html