Android笔记

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

本文原创,转载请说明出处,谢谢。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值