1,选中某数字,按住 ctrl+Alt+c,可以将该数字声明为常量,很方便
2,如果对一段代码添加判断,循环或者添加异常,同步等可以选中这段代码,然后Ctrl+Alt+t.
3.Android中的弱引用,如果GC检测到弱引用对象,无论内存是否充足都会将其回收,而对于强引用的对象,即使报OOM的错误,也不会回收。软引用对象,当内存充足,就不会回收,内存不足,才会回收。
Handler的调用是异步的,最容易出现OOM的问题,为了解决这个问题,会使用弱引用。
4.
int num= new Random().nextInt(500) //生成0到500之间的随机数,包括0,但不包括500
5.Handler,MessageQueue,Message,Looper之间的关系:
MessageQueue是一个消息队列,实质上是一个单链表,中间包含很多的Message,Looper相当于一个发动机,它一开始工作,就会把消息队列中的消息发送给Handler,Handler来处理这些消息。
Handler的主要作用:1.实现定时任务;2.消息处理,通知主线程更新UI。
每一个线程都包括这四项,在主线程中其实已经帮我们写好了,getMainLooper()获得主线程的Looper,在子线程中使用Handler需要这样写:
Looper.prepare();
Handler handler=new Handler();
Looper.looper();
6.ANR(Application Not Responding)应用程序无响应,在UI线程中执行耗时操作引起的。
7.AsyncTask:用Thread和Handler实现封装来实现后台线程完成后更新UI;
8.android6.0(API 23)后添加了动态权限,即6.0及以上的系统,读取联系人信息,位置信息等权限处理在配置文件中声明之外,还需要动态设置权限,让用户开启权限,保证用户的隐私和安全。
9.打开设置权限:
Intent intent=new Intent();
intent.setAction(Settings.ACTION_APPLICATION_DETAILS_SETTINGS);
intent.addCategory(Intent.CATEGORY_DEFAULT);
intent.setData(Uri.parse("package:"+getPackageName()));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
intent.addFlags(Intent.FLAG_ACTIVITY_NO_HISTORY);
intent.addFlags(Intent.FLAG_ACTIVITY_EXCLUDE_FROM_RECENTS);
startActivity(intent);
10.获取手机上安装的所有应用的信息:
private List<ResolveInfo> getAppsInfo() { Intent intent=new Intent(Intent.ACTION_MAIN,null); intent.addCategory(Intent.CATEGORY_LAUNCHER); return getPackageManager().queryIntentActivities(intent,0); }