Android开发中何时使用多进程?
问答-Android开发中何时使用多进程?
我在github上回答了一个问题:
Android开发中何时使用多进程?
1.要想知道如何使用多进程,先要知道Android里的多进程概念。一般情况下,一个应用程序就是一个进程,这个进程名称就是应用程序包名。我们知道进程是系统分配资源和调度的基本单位,所以每个进程都有自己独立的资源和内存空间,别的进程是不能任意访问其他进程的内存和资源的。那如何让自己的应用拥有多个进程?很简单,我们的四大组件在AndroidManifest文件中注册的时候,有个属性是android:process,这里可以指定组件的所处的进程。默认就是应用的主进程。指定为别的进程之后,系统在启动这个组件的时候,就先创建(如果还没创建的话)这个进程,然后再创建该组件。你可以重载Application类的onCreate方法,打印出它的进程名称,就可以清楚的看见了。再设置android:process属性时候,有个地方需要注意:如果是android:process=":deamon",以:开头的名字,则表示这是一个应用程序的私有进程,否则它是一个全局进程 ...
comments
Read More
Android源码学习之ViewGroup
Android源码学习之ViewGroup
android继承于View,同时它包含了一个View数组存储它的子View,也就是说它是一个容器。这就是经典的设计模式中的组合模式。在Android的视图结构中,容器一定是ViewGroup,只有ViewGroup才能包含其他视图,像TextView,ImageView这些View是不能包含子视图的,它们是单一控件。这一点跟iOS的视图结构很不一样的。在iOS中所有的视图都是继承于UIView,同时UIView也是一个容器,能包含其他UIView。从这一点来说iOS的视图结构更简单。
是什么使得ViewGroup具有了容易功能呢?ViewGroup除了继承View外,还是实现了两个接口:ViewManager
和ViewParent
。ViewManager主要定义了addView和removeView的方法,ViewParent主要定义了刷新容器的接口requestLayout和其他一些焦点事件的处理等接口。除此之外,还有非常重要的一点,ViewGroup是一个抽象类。我们知道View并不是抽象类,为什么ViewGroup继承了View反而成了抽象类呢,是增加了什么新的抽象方法吗?不是,ViewGroup中的抽象方法是继承于View的onLayout方法。onLayout方法在View中并不是抽象方法,只是一个空方法,但是在ViewGroup中它被定义为了抽象方法。我第一次发现原来还可以这样做。onLayout的主要作用是放置子View的位置,而不同的布局方式算法不一样,所有留给子类实现比较合理。
ViewGroup中并没有覆盖onMeasure方法,但是增加了一些计算子View大小的方法:measureChildren方法就是将所有的子View都遍历一遍,并调用他们的measure方法。ViewGroup中同样没有覆盖onDraw方法,但是覆盖了dispatchDraw方法。dispatchDraw方法主要作用是调用每个子View的draw方法。看来onXXX方法在ViewGroup中并不重要,它更多的在调用子View的方法。
LayoutParams
布局参数LayoutParams是ViewGroup的一个重要内部类 ...
comments
Read More
股票投资总结
股票投资总结
自从 去年从8月份开始入市美股,11月中入市A股,后来入市港股,真是认识到股市的钱真不是那么容易赚的。为什么很多人劝说不要踏入股市,为什么股市是一赢二平七输,都是很有道理的。要想通过股市一夜暴富也是基本不可能。不过不管怎样,学一下理财和投资,还是不错的。这也算是为以后铺路。
comments
Read More
Android源码学习系列开篇
Android源码学习开篇
最近一直觉得自己后劲不足,很多想做的效果都觉得很艰难,不知道怎么下手。从很早的时候我就想学习Android源代码。第一次下载Android的源代码是2011年四季度的时候,那时候在公司的电脑上安装了Linux系统,也把源码下载下来了。但是后来一段时间后,我离开那个公司。后来几年时间都没有下过Android源码,因为一直在Android和iOS直接切换开发。不过我确实下载了Android SDK源码。其实一般的应用开发只要了解Android SDK开发就够。这些年断断续续看过一些SDK的源码。
这段时间,我终于下定决心要好好学习一下Android源码,原因之一是我拥有了一部自己的MacBook Pro,不再为电脑而烦恼。为了下载Android源代码,我试了很多方法下载,人生第一次为软件付费,买了一个VPN。但是我电脑硬盘比较小,源码很大,我下载了好几次要么下载到一部分就中断了没法继续下载,要么是我的电脑磁盘装不下。。最后我还是在百度网盘下载了一个别人已经下载好的。
当然我的学习还是以framework的源码为主,然后逐渐往底层学习。要学习framework根本不必下载Android源码,直接下载Android SDK的源码就行,Google提供的SDK Manager就有下载源码功能,然后在Eclipse或者Android Studio关联即可。为了鞭策自己学习,我决定写一个自己Android源码学习系列文章,记录自己的学习心得。另外最近作为面试官,面了一些Android的求职者,感觉很多人都是满足实现功能,不能自己去探究实现原理。想当年自己也是这样。越早摆脱这种情况,越有优势。
comments
Read More
Android源码学习之View
Android源码学习之View
在Android中,View是所有视图控件的基类。Android的视图控件的设计采用了经典的设计模式--组合模式。View是基础控件,而ViewGroup是可以包含子View和管理子View的空间,ViewGroup同时也是一个View。这跟iOS的视图空间设计有很大不同。在iOS的视图框架中,所有视图都是继承UIView,而UIView本身是可以包含和管理子UIView的。我不知道这两种设计有什么优劣,感觉iOS的设计更简单直接。
View的源代码超过2万行,当然包括了很多注释。这里面定义了很多基本的方法,主要是视图渲染的相关方法和事件的相关方法,不过有一点我不是很明白的就是里面有不少是根scrollbar相关的方法。我们实际应用中貌似有scrollbar的控件貌似只有AdapterView的子控件,ScrollView和TextView,scrollbar的特性为什么不直接放到这些类中,或者专门为这些类专门建立一个父类来处理scrollbar。View中的scrollbar特性应该大部分视图控件都不需要吧。当然这些只是我的疑问罢了,Google这样设计也许有他的道理。
重要方法
一个View要渲染到屏幕上,有几个重要的方法:
- onMeasure系方法
- onLayout系方法
- onDraw系方法
onMeasure系方法
每一个onXXX方法又有若干个相关XXX方法。例如onMeasure方法,相关的方法是measure(int widthMeasureSpec, int heightMeasureSpec)方法,setMeasuredDimension(int measuredWidth, int measuredHeight)方法,MeasureSpec内部类。其中measure(int widthMeasureSpec ...
comments
Read More
当做了一段时间的Android的困惑
当做了一段时间的Android的困惑
当做一门技术到达一定的时间之后,就会陷入一个困境。不知道如何提高。任何一门技术,都是刚开始的时候,进步非常快,然后收获非常多,但是越往后越难有进步。因为因为任何一门技术都有一定的瓶颈,如何打破这个瓶颈,是很重要的。一旦打破这个瓶颈,就会进入下一个平台,下一个级别。然而第二个级别也还是会重复第一个级别的步骤。如此重复。
我们大多数人都是会在第一个第二个级别上挣扎前进,无法突破。我不知道自己的Android技术现在时处在第一还是第二个级别,但是我现在确实遇到了瓶颈,感觉突破很艰难。最近产品上又有些需求比较难做,自己感觉可以实现,但是真要做出来,需要花很多时间和精力,还不能确定完全实现产品所需效果。而项目本身是比较紧急的,如果既要实现效果又要保证进度,估计我要不吃饭不睡觉才可以实现,这真是不可能的。其实这总结到一句话就是自己的实力还没达到随心所用的地步,特别是一些需要定制的动画交互方面的。这些效果别人都都能做出来了,但是自己要做同样的效果,需要绞尽脑汁。
鸟厂的Android人才真的很少,有Android技术三年以上的人全公司估计少之又少。鸟厂其实人才不少,但是留不住,很多人呆了一年就离开,真是件令人悲伤的事,可是互联网行业还真是大部分公司都是这样子。有时候人真需要沟通交互才可以进步 更快。我已经很久没有试过这个感觉了。那种进步很快,跟大家交流碰出火花的情形少之又少,还是两年前刚来鸟厂的时候有这个感觉。有时候觉得挺孤独的 ...
comments
Read More
关于Pelican上Disqus无法加载的问题
最近发现我的博客Disqus加载不出来,以前是好好的。后来根据它的提示去找问题,找了半天也找不出问题所在。然后网上search,发现了一篇跟我类似的问题文章这里。我的配置文件里确实有 RELATIVE_URLS = True
,把它设置为False也没用。检查了N遍shortname,到Disqus设置里各种试各种检查,都还是没有解决。
没有办法,我只好在Disqus上重新创建一个新的site,然后回来配置相应的改了。run起来了,可以了。神了。
不过经过这一次的折腾,我还学到不少别的东西。前段不太懂的人,真是悲剧。以后在这方面好好补补
comments
Read More
快速滚动条(FastScroll)的定制
最近项目中因为要做定制快速滚动条功能而研究这块,发现还不是那么好做。
我首先找了网上有类型功能应用,暂时只发现小米自动相册和腾讯的相册管家做了这个功能。然后网上找快速滚动条的定制的相关资料。最后发现只能通过style或者反射机制去改变快速滚动条,而且能改的东西非常有限----只能替换图片。但是小米和腾讯为什么能定制的那么好呢?小米可能是系统层面上改的,那腾讯的总不能也是吧。我只能去下载相册管家的包来反编译了。
经过我反复看他们的代码和资源文件,终于找到了相关的类--ExpandableListView,这个跟系统的ExpandableListView不是同一个,只是单纯的名字相同而已。因为代码混淆过了,我花了很大力气虽然看懂了个大概,却是,没办法完全搞清一些细节性的东西。原理大致是这样:他们并没有去定制FastScroll,而是自己生成了一个叫ScrollPanel的View,然后把这个View画上去,并且对这个View设置了OnTouchListener,对用户的触摸事件处理,拖动的时候不断去滚动ListView,实现类型FastScroll的效果。
由于它们的源代码混淆了很多细节看不了,我只好去参考系统的FastScroll源代码。虽然大致看懂了,但是自己去实现的时候,还是达不到想要的效果。因为时间和精力问题,我现在只能暂时放一放,之后有时间再研究,实在不行我心里也有其他曲线救国的方案可以试试。
今天发现了一个类型功能的库,很不错。记录一下.
QuickScroll
comments
Read More
自定义DateView控件
最近因为项目需要自定义一个日期控件,我花了一个多小时写了这个控件。虽然跟设计效果图还有点细微差别,但是这个可以慢慢修改。
public class DateView extends View {
private static final int DAY_TEXT_SIZE = 32;
private static final int MONTH_TEXT_SIZE = 16;
private int mDay;
private int mMonth;
private int mYear;
private TextPaint mDayPaint;
private TextPaint mMonthPaint;
public DateView(Context context) {
super(context);
initView();
}
public DateView(Context context, AttributeSet attrs) {
super ...
comments
Read More
Activity动画(二)
Activity动画(二)
如果要统一所有的Activity的打开可关闭动画,可以有一个很简便的方法:就是设置Application的theme。在Application的theme里有一个Android:windowAnimationStyle的属性,可以定义了一个Activity的打开和关闭动画。例如下面的例子就自定义了一个theme。
````
<style name="AnimationActivity" mce_bogus="1" parent="@android:style/Animation.Activity">
<item name="android:activityOpenEnterAnimation">@anim/translate_between_interface_right_in</item>
<item name="android:activityOpenExitAnimation">@anim/translate_between_interface_left_out</item>
<item name="android:activityCloseEnterAnimation">@anim/translate_between_interface_left_in</item>
<item name="android:activityCloseExitAnimation">@anim/translate_between_interface_right_out</item>
<item ...
comments
Read More