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