个人学习android的基本知识记录

本博客主要记载一些我经常需要使用并且需要注意的东西。

1:service与activity之间的通讯方式:

(1):可以选择bindservice的方式去做,具体是在service中有个onbind()方法会返回一个IBinder,然后可以自定义一个IBinder,通过他的个getservice()方法返回一个service对象,然后就是activity这边通过bindservice中调用的connection得到IBinder对象,继而得到service对象,然后可以很方便的实现activity获取service中的内容进行界面更新等的操作。

(2):通过broadcast发送广播可以实现activity与service之间的交互。

(3):aidl也可以实现activity与service之间的交互,具体方法跟(1)有些类似,只是在获取service对象是这样的,Iperson.stub.asInterface(service),其中Iperson是我们定义的aidl接口,而service中onbind是返回stub(stub是IPerson.Stub stub = new IPerson.Stub(){...}得到的);得到iperson对象后可以随意调用其接口自带的方法,与service交互也可以轻松实现。

2:适配机型需要注意的知识点:

(1)尽量选用match_parent,warp_content,layout_weight这些参数来设置控件的属性,另外我是将relativelayout作为选择layout的首选(因为relativelayout是一个相对位置处理的layout,当一个的位置在确定了的时候,其他控件的位置也是可以跟着确定的,因此在适配的过程中省去了很多需要适配的麻烦)。

(2)有些图片需要拉伸与收缩的比较严重的话可以选择.9.png类型的图片

(3)xml中尽量少出现layout分层结构,layout的加载层次越少,ui的加载性能就会越快

3:自定义view

(1)实现onmearsure(),onlayout(),ondraw()方法其中第一个是测量view的高宽,第二个是计算view的layout值,最后一个就是画图了,另外需要用invalidate()来触发view的绘制刷新,可以根据现况去自定义一个view实现高效的编程。

4:handler机制

        handler是一种实现多线程的机制,其中在处理thread类中实现的比较多,handler的原理是将message发送到messagequene,然后通过looper方法对消息进行轮询,最后丢由handler的handlermessage方法处理并实现线程与主线程的通讯,其中发送机制可以有handler.sendmessage(),handler.obtainmessage()等;需要注意的是在线程不需要用,或者用户直接退出等等操作的时候,需要对子线程进行销毁处理,可以调用handler.remove(runnable)在ondestory()中去移除它。

5.android调用webservice的处理:

      我是选择第三方库ksoap2-android来实现的,其中需要注意的是传参值的顺序需要一致,不能颠倒顺序,尤其是传的对象是一个实体类时候。

6:数据库sqlite的使用:

    其中的实现就是继承一个sqliteopenhelper类实现oncreate(),onupgrade()方法,并在oncreate方法中使用db.exec(sql)实现数据库;操作的处理就是使用sqlitedatabase类来实现,其中操作方法就是增删改查,这部分需要对数据字段的使用比较熟悉;需要注意的是在cursor处理数据后如果不需要的话应该及时close掉,防止内存泄露。

7:实现滚动效果:
 // 调用此方法滚动到目标位置
    public void smoothScrollTo(int fx, int fy) {
        int dx = fx - mScroller.getFinalX();
        int dy = fy - mScroller.getFinalY();
        smoothScrollBy(dx, dy);
    }


    // 调用此方法设置滚动的相对偏移
    public void smoothScrollBy(int dx, int dy) {
        // 设置mScroller的滚动偏移量
        mScroller.startScroll(mScroller.getFinalX(), mScroller.getFinalY(), dx, dy);
        invalidate();// 这里必须调用invalidate()才能保证computeScroll()会被调用,否则不一定会刷新界面,看不到滚动效果
    }


    @Override
    public void computeScroll() {

        // 先判断mScroller滚动是否完成
        if (mScroller.computeScrollOffset()) {
            // 这里调用View的scrollTo()完成实际的滚动
            scrollTo(mScroller.getCurrX(), mScroller.getCurrY());
            // 必须调用该方法,否则不一定能看到滚动效果
            postInvalidate();
        }
        super.computeScroll();
    }



猜你喜欢

转载自blog.csdn.net/daxiangzaici/article/details/50895902