打算开个开源系列,用来分享在项目过程中些的一些小轮子。
在这年的末尾,挤下时间,看能改几个还勉强过得去的出来分享给大家。
能力有些,实现得也不算很优雅。
还望各大神指点。

我要造轮子

作为一名爱折腾人员,重复造轮子这种事还是常做的。
没办法啊,做的过程才能发现问题嘛!最少我在做的过程就遇到啦!
例如阴影效果,图片如何压缩显示的问题(蹩脚的写了一个ImageLoader实在不怎样,改用Fresco!),排列等等问题

项目的下载地址请点击这里

我们直接上效果图,这个是完成后的样子,目前改得勉强像一回事了。
就先粘贴上来,有需要的就拿去再根据自己需要改一个。

这里写图片描述这里写图片描述

这里写图片描述

Read more »

好了,终于到了最后一个啦,写到这里,真的觉得不容意啊,以前看这些组件也就那样了,现在还要记录下来,重点是这东西都被分析烂了,我们这些后人屌丝还在写,没点突破的。真没意思呢!就当写作业咯。啦啦啦啦,不管如何,让我们开始看下吧

起航 — ContentResolver

API: 23

说真的,这个组件我还真的相对于Activity和Service用起来真的好少啊!
现在都不能记起来用他来干嘛了,虽然知道他能用来做跨进程通讯用,不过对于一般的app。
这玩意还真的用的次数少啊! 现在能想起来的一次使用这个就是要获取图片的时候。
以前开发的时候遇到的恶心的是,有些Rom把相册给阉割了,搞了个别的来代替,导致调不了图库!
所以搞到需要自己开发一个,真的很无语!

ContentResolver mContentResolver = this.getContentResolver();
Cursor mCursor = mContentResolver.query(mImageUri, null,
            MediaStore.Images.Media.MIME_TYPE + "=? or "
                    + MediaStore.Images.Media.MIME_TYPE + "=? or " + MediaStore.Images.Media.MIME_TYPE + "=?" + " or " + MediaStore.Images.Media.MIME_TYPE + "=?",
            new String[]{"image/jpeg", "image/png", "image/jpg", "image/jpe"},
            MediaStore.Images.Media.DATA);

从这里我们开始看起吧

Read more »

我们知道,我们的Service如果要执行一些耗时的操作,需要开单独的线程去干活,而IntentService却不用,
在他的onHandleIntent函数里面我们可以执行耗时操作,啊,到底神奇在哪里了呢?
让我们去看看他的源码,背后到底做了什么好事情!

起航 — IntentService

API:23

public abstract class IntentService extends Service 

我们的IntentService是一个继承Service的抽象类,那关于他的启动,停止等就和Service一样,前一篇就解释过了,我们现在就不说了。整个类也就164行,不大,还不够AMS里面一个函数的一半长度,哈,我们从他的OnCreate函数开始吧

@Override
public void onCreate() {
    // TODO: It would be nice to have an option to hold a partial wakelock
    // during processing, and to have a static startService(Context, Intent)
    // method that would launch the service & hand off a wakelock.

    super.onCreate();
    HandlerThread thread = new HandlerThread("IntentService[" + mName + "]");
    thread.start();

    mServiceLooper = thread.getLooper();
    mServiceHandler = new ServiceHandler(mServiceLooper);
}

我们看到他开了一个子线程和Handler。这里我们可以猜测了,之所以在我们的onHandleIntent很可能是因为他们两个!

Read more »

今天我们来看下这安卓的四大组件的另外一个Service,
按套路应该先列点我们在探索过程需要注意的问题,不过现在一时没想到有什么,
让我们边看说解释,看下有什么需要注意的

起航—-开启服务

API : 23

我们启动服务一般有两种调用StartServiceBindService,这里我们先从StartService开始。
首先去到ContextWrapper里面的startService函数

@Override
public ComponentName startService(Intent service) {
    return mBase.startService(service);
}
Read more »