Android笔记
来源:互联网 发布:倩女幽魂mac可以玩吗 编辑:程序博客网 时间:2024/06/05 17:14
1.在设置按钮背景图片时,尽量使用占用空间小的图片,这是因为Android系统在执行Oncreat方法时 绘制VIew,要把对应的背景图片解析成bitmap放在内存中,如果图片过大,会导致解析的进程耗时过长,因为setcontent是在UI线程中,所以会导致卡顿。
2.R.drowable下的文件加载通常不会导致OOM,因为Android系统有一定机制。
3.养成Bipmap使用完recycle的好习惯,一般Android内存中使用的对象再多都不会导致OOM。然而Bitmap例外,Bitmap在内存中的存储格式为byre[],我们使用mat软件进行内存分析即可看到,Bitmap占用了系统分配的很大内存空间。
4.安卓系统设置延迟功能代码:
SystemClock.sleep(1000);
会使代码运行到这里窗【冻结】1秒如果超过15秒会导致ANR;
延迟执行但是不会导致ANR的代码:
new Handler().postDelayed(new Runnable() { @Override public void run() { textview.settext("刷新成功")//5秒后执行 } }, 5000);
5.drawerlayout 设置主内容与菜单之间颜色透明Mydrawer.setScrimColor(Color.TRANSPARENT);
6.ListView使用ViewHolder极简写法
public static <T extends View> T getAdapterView(View convertView, int id) { SparseArray<View> viewHolder = (SparseArray<View>) convertView.getTag(); if (viewHolder == null) { viewHolder = new SparseArray<View>(); convertView.setTag(viewHolder); } View childView = viewHolder.get(id); if (childView == null) { childView = convertView.findViewById(id); viewHolder.put(id, childView); } return (T) childView; }
用法:
@Override public View getView(int position, View convertView, ViewGroup parent) { if (convertView == null) { convertView = LayoutInflater.from(getActivity()).inflate(R.layout.fragment_feed_item, parent, false); } ImageView thumnailView = getAdapterView(convertView, R.id.video_thumbnail); ImageView avatarView = getAdapterView(convertView, R.id.user_avatar); ImageView appIconView = getAdapterView(convertView, R.id.app_icon);
7.
getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FORCE_NOT_FULLSCREEN);//切换到非全屏 getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//切换到全屏 getWindow().clearFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN);//清除 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);//透明状态栏 getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION);//透明状导航栏 如果4.4的机器设置透明状态栏白条,则需要在XML里设置去掉以下两个属性: android:clipToPadding="true" android:fitsSystemWindows="true"
8.像素转dip
public int DipToPixels(Context context, int dip) { final float SCALE = context.getResources().getDisplayMetrics().density; float valueDips = dip; int valuePixels = (int) (valueDips * SCALE + 0.5f); return valuePixels; }
dip转像素
public static float PixelsToDip(Context context,int Pixels) { final float SCALE = context.getResources().getDisplayMetrics().density; float dips =Pixels / SCALE ; return dips; }
9.在那里startActivityForResult就在哪里写回调onActivityResult ,例如在Fragment1里写startActivityForResult,回调方法onActivityResult 就要写在Fragment1里。
10.一、ActivityManagerService提供的主要功能:
(1)统一调度各应用程序的Activity
(2)内存管理
(3)进程管理
当用户单击某个应用图标后,执行程序会在该图标的onClick()事件中调用startActivity()方法,该方法会调用startActivityForResult(),在这个方法内部会调用Instrumentation对象的executeStartActivity()方法,每个Activity内部都有一个Instrumentation对象的引用,它就是一个管家,ActivityThread要创建或者暂停某个Activity都是通过它实现的。
11.介绍下实现一个自定义view的基本流程
明确需求,确定你想实现的效果 2.确定是使用组合控件的形式还是全新自定义的形式,组合控件即使用多个系统控件来合成一个新控件,你比如titilebar,这种形式相对简单, 参考 3.如果是完全自定义一个view的话,你首先需要考虑继承哪个类,是View呢,还是ImageView等子类。 4.根据需要去复写View#onDraw、View#onMeasure、View#onLayout方法 5.根据需要去复写dispatchTouchEvent、onTouchEvent方法 6.根据需要为你的自定义view提供自定义属性,即编写attr.xml,然后在代码中通过TypedArray等类获取到自定义属性值 7.需要处理滑动冲突、像素转换等问题
12.可见,Java较Native端实现简单很多,通过Aidl工具来实现类似功能。所以,要实现一个Java端的service,只需要做以下几件事情:
1.写一个.aidl文件,里面用AIDL语言定义一个接口类IXXX。
2.在Android.mk里加入该文件,这样编译系统会自动生成一个IXXX.java, 放在out/target/common/obj/JAVA_LIBRARIES/framework_intermediates/src/core 下面。
3.在服务端,写一个类,扩展IXXX.Stub,具体实现IXXX的接口函数。
Android线程间通信的基本方式
使用管道流Pipes
共享内存
使用Hander和Message
本文原创,转载请说明出处,谢谢。
- android笔记
- android笔记
- android笔记
- Android笔记
- Android笔记
- android笔记
- android 笔记
- android笔记
- Android笔记
- android笔记
- Android笔记
- Android笔记
- android笔记
- android笔记
- android笔记
- android 笔记
- android 笔记
- Android笔记
- has_key or in
- docker 学习笔记4
- onclientclick和onclick区别
- 何值会被判断为false
- 设置平铺的方式拉伸图片
- Android笔记
- 剑指offer-从上往下打印二叉树
- Android项目开发(2)-注册手机验证知识总结
- 【SSH (六)】struts2 整合 spring 并 连接数据库
- linux nohup
- Json
- JAVA内存溢出(java.lang.OutOfMemoryError)的常见情况和处理方式总结
- Ubuntu安装浏览器Java扩展
- C++ 基础总结