分类: Uncategorized

  • 2016年房地产继承税费表一览

    http://www.360doc.com/content/16/0311/12/7654794_541292867.shtml

    2016年房地产继承税费表一览

    税费税种
    编辑
    旧版契税
    符合住宅小区建筑容积率在1.0(含)以上、
    二手房交易税费
    二手房交易税费
    单套建筑面积在140(含)平方米以下(在120平方米基础上上浮16.7%)、实际成交价低于同级别土地上住房平均交易价格1.2倍以下等三个条件的,视为普通住宅,征收房屋成交价或评估价的1.5%。反之则按3%。
    新政下的契税
    普通住宅:
    卖方:
    不满两年(无论是否唯一)6.6%
    满两年不满五年(无论是否唯一)1%
    满五年唯一住房免税
    满五年不唯一住房1%
    买方:
    购买90平以下房产的1%
    购买90平以上房产的(唯一住房)1.5%
    购买90平以上房产的(不唯一住房)2%
    商业房或公司产权:3%
    城市维护建设税
    营业税的7%。
    教育费附加
    营业税的3%。
    个人所得税
    普通住宅2年之内:{售房收入-购房总额-(营业税+城建税+教育费附加税+印花税)}×20%;2年以上(含)5年以下的普通住宅:(售房收入-购房总额-印花税)×20%。出售公房:5年之内,(售房收入-经济房价款-土地出让金-合理费用)×20%,其中经济房价款=建筑面积×4000元/平方米,土地出让金=1560元/平方米×1%×建筑面积。出售不是家庭唯一住房的个税按房价的1%征收。
    交易手续费
    2元/平方米×建筑面积
    印花税
    房屋成交总额×0.05%(2009年至今暂免)
    营业税
    2011年1月27日新通知规定:个人将购买不足5年的住房对外销售的,全额征收营业税;个人将购买超过5年(含5年)的非普通住房对外销售的,按照其销售收入减去购买房屋的价款后的差额征收营业税;个人将购买超过5年(含5年)的普通住房对外销售的,免征营业税。
    (废止)住宅5年内:房屋评估总额×5.6% ;5年或5年以上普通住宅无营业税。
    (最新)住宅2年内:房屋评估总额×5.6% ;2年或2年以上普通住宅无营业税。
    2015年3月30日财政部、国家税务总局发布《关于调整个人住房转让营业税政策的通知》(财税[2015]39号)规定:“个人将购买不足2年的住房对外销售的,全额征收营业税;个人将购买2年以上(含2年)的非普通住房对外销售的,按照其销售收入减去购买房屋的价款后的差额征收营业税;个人将购买2年以上(含2年)的普通住房对外销售的,免征营业税。”[2]
    增值税
    自2016年5月1日起,在全国范围内全面推开营业税改证增值税试点,建筑业、房地产业、金融业、生活服务业等全部营业税纳税人,纳入试点范围,由缴纳营业税改为缴纳增值税。《财政部国家税务总局关于全面推开营业税改证增值税试点的通知》(财税[2016]36号)
    对于非一线城市,个人购买不足2年的住房对外销售,按照5%的征收率全额缴纳增值税;个人将购买2年以上(含2年)的住房对外销售的,免征增值税。
    北、上、广、深四个一线城市,个人购买不足2年的住房对外销售的,按照5%的征收率全额缴纳增值税;个人将购买2年以上(含2年)的非普通住房对外销售的,以销售收入减去购买住房价款后的差额按照5%的征收率缴纳增值税;个人将购买2年以上(含2年)的普通住房对外销售的,免征增值税。
    土地增值税
    普通住宅免征;非普通住宅3年内:房屋成交总额×0.5% ,3年至5年:房屋成交总额×0.25%,5年或5年以上:免征。
    房屋所有权登记费
    80元,共有权证:20元
    买卖合同公证费
    买卖合同需要公证时才须缴纳,房屋成交总额×0.3%;
    过户费用
    (1)契税:9
    卖方:
    不满两年(无论是否唯一)6.6%
    满两年不满五年(无论是否唯一)1%
    满五年唯一住房免税
    满五年不唯一住房1%
    买方:
    购买90平以下房产的1%
    购买90平以上房产的(唯一住房)1.5%
    购买90平以上房产的(不唯一住房)2%
    (2)房屋交易手续费:‘买卖双方各自缴纳房屋建筑面积*2元/平方米
    (3)房屋所有权登记费:80元。
    (4)房屋评估费;按评估额0.5%缴纳
    计算方式
    编辑
    契税由买方交纳,交税比例是:
    1、普通住宅应该交纳成交价或是评估价的1.5%的契税。
    2、非普通住宅应该交纳成交价或是评估价的3%的契税。
    过户费用;
    (1)契税;90平方米以下首次购房的按1%缴纳;90—140平方米按房价1.5%缴纳;140平方米以上按房价3%缴纳买方承担(二套房按3%收取)
    (2)营业税:房屋产权取得满五年的免征,未超过五年的按房价5.8%缴纳。卖方承担
    (3)土地增值税;房屋产权取得满五年的免征,未超过五年的按房价1%预缴纳,按照超率累进税率计算,多退少补。卖方承担
    (4)所得税:房屋产权取得满五年的免征,未超过五年的按房价1%或房屋原值—房屋现值差额20%缴纳。(房屋原值一般按上道契税完税额计算)卖方承担
    (5)房屋交易手续费:按房屋建筑面积6元/平方米交纳双方承担
    (6)房屋产权登记费:80元。买方承担
    (7)房屋评估费:按评估额0.5%
    交易手续
    编辑
    正常过户手续
    (一) 交易税费
    1.营业税 (税率5.6%, 卖方缴纳)
    根据2015年3月房产新政,转让出售购买时间不足2年的非普通住宅按照全额征收营业税,转让出售购买时间超过5年的非普通住宅或者转让出售购买时间不足2年的普通住宅按照两次交易差价征收营业税,转让出售购买时间超过5年的普通住宅免征营业税。
    这里有两个要点
    ①购买时间超过2年这里首先看产权证, 其次看契税发票,再次看票据(房改房看国有住房出售收入专用票据)这三种证件按照时间最早的计算。一般地说票据早于契税发票,契税发票早于产权证,房改房中时间最早的是房改所收的定金的票据。
    ②所售房产是普通住宅还是非普通住宅。
    另:如果所售房产是非住宅类如商铺、写字间或厂房等则不论证是否过5年都需要全额征收营业税。
    2. 个人所得税(税率交易总额1%或两次交易差的20%, 卖方缴纳)
    征收条件以家庭为单位出售非唯一住房需缴纳个人房转让所得税。在这里有两个条件①家庭唯一住宅②购买时间超过5年。如果两个条件同时满足可以免交个人所得税;任何一个条件不满足都必须缴纳个人所得税。注:如果是家庭唯一住宅但是购买时间不足5年则需要以纳税保证金形式先缴纳,若在一年以内能够重新购买房产并取得产权则可以全部或部分退还纳税保证金,具体退还额度按照两套房产交易价格较低的1%退还。
    注:地税局会审核卖方夫妻双方名下是否有其他房产作为家庭唯一住宅的依据,其中包括虽然产权证没有下放但是房管部门已经备案登记的住房(不包含非住宅类房产)。
    另注:如果所售房产是非住宅类房产则不管什么情况都要缴纳个人所得税。而且地税局在征税过程中对于营业税缴纳差额的情况,个人所得税也必须征收差额的20% 。
    3.印花税(税率1%,买卖双方各半)
    从2009年至今暂免征收。
    4.契税(税率1%、1.5% 、3%,买方缴纳)
    征收方法:按照基准税率征收交易总额的3%,若买方是首次购买面积不足90平的普通住宅缴纳交易总额的1%,若买方首次购买面积超过90平(包含90平)的普通住宅则缴纳交易总额的1.5%。
    注:首次购买和普通住宅同时具备才可以享受优惠,契税的优惠是以个人计算的,只要是首次缴契税都可以享受优惠。若买方购买的房产是非普通住宅或者是非住宅则缴纳交易总额的3%。
    5.测绘费1.36元/平米 总额=1.36元/平米*实际测绘面积 (2008年4月后新政策房改房测绘费标准:面积75平米以下收200元,75平米以上144平米以下收300元,144平米以上收400元)
    一般房改房都是需要测绘的,商品房如果原产权证上没有市房管局的测绘章也是需要测绘的。
    6.二手房交易手续费总额:住宅6元/平米×实际测绘面积 非住宅10元/平米×实际测绘面积
    7.房屋产权登记费80元 共有权证:20元
    (二)所需材料
    1.地税局需要卖方夫妻双方身份证和户口本复印件一套(若卖方夫妻不在同一个户口本上还需提供结婚证复印件一套)、买方身份证复印件一套、网签买卖协议一份、房产证复印件一套(如果卖方配偶已经去世还需要派出所的死亡证明一份)
    2.房管局需要网签买卖协议一份、房产证原件、新测绘图纸两张,免税证明或完税证明复印件;如省直房改房还需已购公房确认表原件两份和附表一。
    注:房改房过户时需要配偶一起出面签字;若配偶已经去世但使用了其工龄,如果是在房改之后则需要先做继承公证再交易过户;如在房改之前,则应提交派出所开具的死亡证明原件。省直房改房还需填写《已购公房确认表》两份并由单位和省直房改办盖章确认,并提交房改原始票据原件。
    赠与过户手续
    (一)费用:免征营业税和个人所得税,但是需要增加
    1.公证费:40元/平米× 产权证面积
    2.契税:不论房产什么情况都需要征收全额契税
    其他费用和正常过户都一样
    (二)所需材料
    1.公证处需要卖方夫妻双方户口本和身份证复印件一套、买方身份证复印件一份,产权 证复印件一套
    2.不需要经过地税局直接可以过户。
    3.房管局需要材料同正常过户基本一样只不过还需要公证书原件一份。
    继承房产过户
    (一)继承房产的费用有
    1.公证费 40元/平米×产权证面积
    2.继承公证费 80元/单 放弃继承公证:80元/人
    注:继承的房产再次转让出售时个人所得税按照所得征收20%,不过只要是符合家庭唯一住房和购买超过5年的话就可以免征个人所得税,而且个人所得税退税的政策同样适用。
    (二)所需材料
    1.公证处需要原产权人的死亡证明、产权证复印件和所有当事人的身份证、户口本复印件一套。
    2.房管局需要材料和正常过户基本一样,只是还需要公证书一份。
    注:继承的难点在于公证所有的继承人都放弃继承,这样就要求证明当事人即为所有继承人并且都自愿放弃继承权。
    析产
    析产又称财产分析,是指财产共有人通过协议的方式,根据一定的标准,将共同财产予以分割,而分属各共有人所有。最常见的是夫妻之间的析产,一般会有婚内析产和离婚析产两种情况。过程是先到公证处做析产公正再到房管局办理过户手续。除其他材料外还需要离婚协议书或者法院判决书复印件。
    注意事项
    编辑
    房屋手续是否齐全
    房产证是证明房主对房屋享有所有权的惟一凭证,没有房产证的房屋交易时对买受人来说有得不到房屋的极大风险。房主可能有房产证而将其抵押或转卖,即使现在没有房产证,过短时间办理取得后,房主还可以抵押和转卖。所以最好选择有房产证的房屋进行交易。
    房屋产权是否明晰
    有些房屋有好多个共有人,如有继承人共有的、有家庭共有的、还有夫妻共有的,对此买受人应当和全部共有人签订房屋买卖合同。如果只是部分共有人擅自处分共有财产,买受人与其签订的买卖合同未在其他共有人同意的情况下一般是无效的。
    交易房屋是否在租
    有些二手房在转让时,存在物上负担,即还被别人租赁。如果买受人只看房产证,只注重过户手续,而不注意是否存在租赁时,买受人极有可能得到一个不能及时入住的或使用的房产。因为我国包括大部分国家均认可“买卖不破租赁”,也就是说房屋买卖合同不能对抗在先成立的租赁合同。这一点在实际中被很多买受人及中介公司忽视,也被许多出卖人利用从而引起较多纠纷。
    土地情况是否清晰
    二手房中买受人应注意土地的使用性质,看是划拨还是出让,划拨的土地一般是无偿使用,政府可无偿收回,出让是房主已缴纳了土地出让金,买受人对房屋享有较完整的权利;还应注意土地的使用年限,如果一个房屋的土地使用权仅有40年,房主已使用十来年,对于买受人来说是否还应该按同地段土地使用权为70年商品房的价格来衡量时,就有点不划算。
    市政规划是否影响
    有些房主出售二手房可能是已了解该房屋在5到10年左右要面临拆迁,或者房屋附近要建高层住宅,可能影响采光、价格等市政规划情况,才急于出售,作为买受人在购买时应全面了解详细情况。
    福利房屋是否合法
    房改房、安居工程、经济适用房本身是一种福利性质的政策性住房,在转让时有一定限制,而且这些房屋在土地性质、房屋所有权范围上有一定的国家规定,买受人购买时要避免买卖合同与国家法律冲突。
    单位房屋是否侵权
    一般单位的房屋有成本价的职工住房,还有标准价的职工住房,二者土地性质均为划拨,转让时应缴纳土地使用费。再者,对于标准价的住房一般单位享有部分产权,职工在转让时,单位享有优先购买权。买受人如果没有注意这些可能会和房主一起侵犯单位的合法权益。
    物管费用是否拖欠
    有些房主在转让房屋时,其物业费、电费以及三气(天然气、暖气、煤气)费用长期拖欠,且已欠下数目不小的费用,买受人不知情购买了此房屋,所有费用买受人有可能要全部承担。
    中介公司是否违规
    有些中介公司违规提供中介服务,如在二手房贷款时,为买受人提供零首付的服务,即买受人所支付的全部购房款均可从银行骗贷出来。买受人以为自己占了便宜,岂不知如果被银行发现,所有的责任有可能自己都要承担。
    合同约定是否明确
    二手房的买卖合同虽然不需像商品房买卖合同那么全面,但对于一些细节问题还应约定清楚,如:合同主体、权利保证、房屋价款、交易方式、违约责任、纠纷解决、签订日期等等问题均应全面考虑。
    交易五关
    编辑
    定价关
    二手房买卖最关键的环节就是房屋价格的评估,对于经验不足的业主来说,价格定高了难以找到买主,定低了又会使自己蒙受经济损失。
    建议:将房子委托给有资信的中介公司,然后通过市场比较法、收益法、成本法等为客户的房子做出较为公正的评估。较为常见的市场比较法要求评估人有丰富的交易经验,熟悉了解市场价格,并能够根据房屋的位置、朝向、装修程度、房龄等因素对房价做出较为准确的评估。
    合同关
    近年来,二手房交易双方常常因合同签订得不够规范,导致纠纷事件不断出现。而签订合同常常要注意诸多细节问题,如屋内设施细节、付款方式、交房具体时间、税费交付等等。
    建议:如果委托正规中介公司,最后达成了买卖交易,中介公司会提供规范且详实的买卖合同文本,这就为买卖双方减少了很多麻烦,也避免了因合同不规范而引起的纠纷。随后,卖方要结清所有物业费和供暖费,为下一环节立契过户做好准备。
    过户关
    办理房屋的立契过户,是买卖流程中最耗时间和精力的一关。办理过户涉及一系列的政策法规,手续繁琐。购房者由于缺乏房地产交易知识,没有相关经验,不了解有关部门的办事程序,往往跑断了腿,事情也办不圆满,花费了大量的人力、财力。
    建议:一些正规的中介公司可以代办过户,其办证部门的办事人员通晓有关的政策法规和办事程序,经验丰富。因此,委托专业的中介公司办理房产过户,省时、省力、省心,是多数消费者的首选。
    付款关
    付房款是客户最为担心的一个环节,少则十几万,多则几十万的房款,一旦出了问题,购房者将蒙受巨大的损失。在房屋买卖中,确实存在着房产交割的风险。买方担心把钱交给卖方而产权过户中如出现问题,会拿不到产权证;卖方担心产权证办到了买方名下,买方拖欠房款。
    建议:针对上述情况,一些大型正规中介公司纷纷推出“居间中保”服务,买方把房款交给中介公司保管,卖方把原产权证交中介公司保管,中介为双方办理产权过户,新产权证拿到后,中介一手把房款付给卖方,一手把新产权证交给买方,从而确保了双方的利益。
    交验关
    物业交验是买卖交易的最后一个环节,如果能够顺利完成,客户随即可以安心入住,原业主也不再对房子负有责任了。
    建议:物业交验时,中介公司会提供一份《物业交验单》供买卖双方填写确认。验房的内容主要包括:物业是否与合同约定的一致;所售房屋里的家具等是否已搬空;钥匙是否已交付;水电费、煤气费、电话费、有线收视费等杂费是否已经结清等。
    税费规定
    编辑
    2013年税费规定
    二套房贷款首付比例可提高
    继续严格实施差别化住房信贷政策。对房价上涨过快的城市,人民银行当地分支机构可根据城市人民政府新建商品住房价格控制目标和政策要求,进一步提高第二套住房贷款的首付款比例和贷款利率。
    对出售自有住房按规定应征收的个人所得税,通过税收征管、房屋登记等历史信息能核实房屋原值的,应依法严格按转让所得的20%计征。
    地级市“十二五”末联网住房信息
    通知还要求,市、县人民政府应于一季度公布年度住房用地供应计划。2013年底前,地级以上城市要把符合条件的、有稳定就业的外来务工人员纳入当地住房保障范围。大力推进城镇个人住房信息系统建设,到“十二五”期末,所有地级以上城市原则上要实现联网。加快建立和完善引导房地产市场健康发展的长效机制。
    150万房价个税多缴24万
    来京工作6年的吴先生刚缴纳购房定金,但因二手房购房政策的调整,他可能要面临多缴纳20多万个税的情况。
    在北京,购买二手房所有税费均由购房者承担。例如,吴先生在朝阳区购买了一套价值150万的小户型二类经济适用房,该房已满五年可上市交易,但并非业主的唯一住房。
    按现行政策,吴先生需替业主缴纳总房价1%的个人所得税,即150×1%=1.5万元;但是,如果按照新政策,因该经济适用房最初价值仅为20万元,如果按照差额缴税即(150-20)×20%=26万。
    这多出的24万多元的税收,让吴先生很头疼。他说,他购买的这套小户型用于自住,但现在,多出的20万限制住了他这种非投资者。吴先生希望,政策应该进行细化,对于非投资性的住房,应给予个人所得税减免或返还。
    本次调控时间表
    ●各直辖市、计划单列市和省会城市(除拉萨外),要按照保持房价基本稳定的原则,制定本地区年度新建商品住房(不含保障性住房)价格控制目标,并于一季度向社会公布。
    ●市、县人民政府应于一季度公布年度住房用地供应计划。
    ●2013年底前,地级以上城市要把符合条件的、有稳定就业的外来务工人员纳入当地住房保障范围。
    ●大力推进城镇个人住房信息系统建设,到“十二五”期末,所有地级以上城市原则上要实现联网。
    ■ 北京落地
    ■ 解读
    政策2
    二套房可实施差别化信贷
    对房价上涨过快的城市,人民银行当地分支机构可根据政策要求,进一步提高第二套住房贷款的首付款比例和贷款利率。
    近期,二套房贷首付将调至7成,利率增至1.3倍的传言甚嚣。昨天公布的通知中,并未明确二手房贷的具体政策,但提出可进一步提高。
    陈志和胡景晖均认为,各地应该会从实际情况出发,来确定二套房的政策,除了继续收紧外,国家也明确提出鼓励改善性购房需求,因此对于二套房也不能一棒子打死。同时,也要看当地银行自身的情况。
    “如果真是调到7成,那和全款购房也没太多差别了。”胡景晖认为,二套房也应该实施差别化信贷政策,如果二套房购买的是普通住房,则不应该再上调。
    政策3
    限购政策全覆盖
    限购区域应覆盖城市全部行政区域。
    陈志认为,限购要覆盖城市的全部行政区域是细则非常严厉的条款。此前,一些经济发达城市限购,但其周边区域却不限购,这导致那些投资投机的购房仍然有空间,也导致了这些不限购区域的房价出现快速上涨。而此次新一轮调控中,明确了限购的城市要覆盖城市的全部行政区域。
    “经济发达城市的周边,比如北京周边的香河、涿州等地,以及上海、杭州等城市周边,按照政策也应该要实行限购。这样就堵住了所有的漏洞,让投资投机购房完全没有市场,住房也彻底回归自住的属性。”陈志说。
    不同类型房应区别对待
    胡景晖说,以前的房改房、经适房,当时的购买价格只有两三千甚至几百元每平米,而如今的卖出价已经高达数万元,这就意味着几乎是全部交易额的20%来征税。
    胡景晖说,“再加上营业税、契税等,买一套300万的房子,税费要八九十万。”他认为,北京出台的调控落地细则中,应该要根据房屋的不同性质来区别税收政策。
    税费谁交
    编辑
    买卖房屋的税收,国家列明买卖双方各自应承担的费用标准,各项费用应由谁承担清晰可见,购房的承担其自身的购房交易税费,卖房的承担其自身通过出售房屋所得收益应缴纳的税费;但自2006年国家出台“国十五条”,其中规定,“从2006年6月1日起,对购买住房不足5年转手交易,销售时按其取得的售房收入全额征收营业税”。
    按国家相关部门规定,个人所得税、营业税及土地增值税、教育附加费均是卖方支付的,前二者是房屋卖出所产生,而卖方就是所得者,所以,这以上税费由卖方支付才是合理的。但这几个税费所占比例较大,就成了卖方定价的一个重要标准。因此,很多卖家相应降低房价,搞一刀切,净收房价,所有税费由买方负责了。不过生意场上,一个愿打一个愿挨,当各自认为物有所值时,买卖就成功了。
    税费由谁交的问题,实际上国家有明文规定,全由买家交原则上说是不合理的。但实际上税费与房价是相互关联的,如果卖家交税费,那么房价可能就高一些,买家交税费,房价就相对低一些。合同中约定由谁交税费是符合民法上自治原则的,从这个角度讲税费由买家交也是合理的

  • 转:Android性能优化

    http://rayleeya.iteye.com/blog/1961005

     

    文章都为原创,转载请注明出处,未经允许而盗用者追究法律责任。  

    编写者:李文栋

    Android性能优化

    根据Android的层次结构,性能优化也是分层次进行的,本文会分别对Application、Framework、Native、Kernel各层做总结,每层主要会从性能优化的基本思想、优化技巧、优化工具几个方面进行说明。

    第一章Android应用性能优化(概述)

    应用程序的性能问题是最明显、最容易体现的一类,表现形式也五花八门,举几个例子:

    • 应用程序第一次启动速度慢,或者进入某一界面速度慢;
    • 启动某一有动画效果的界面,动画执行过程不流畅,或者动画执行前卡顿时间长;
    • ListView列表滑动过程中卡顿,不流畅;
    • 应用程序自定义的某特定界面执行速度慢,例如Launcher应用桌面左右滑动效果不平滑;
    • 响应某一用户事件时长时间无响应(ANR);
    • 操作数据库时,执行大量数据的增删改查操作,执行速度慢;
    • 应用长时间运行后,随机出现卡顿现象;

    除了表现形式复杂,原因也很复杂。以上的问题的原因可能不只一个,并且很多情况下并不是应用本身的问题,也有可能是系统其他层次有问题,只不过体现在 应用层。所以说应用层总是首当其冲,开发人员在处理性能问题时,需要做的第一件事情就是判断是否是应用自身引起的性能问题,然后再对症下药;但有些时候应 用本身逻辑正常,明显是系统的硬件配置不足引起,此时就要根据产品或项目需求,采取一些更加激进的方式优化性能,以弥补硬件配置的不足。

    以下从几个不同的角度总结一下应用程序性能优化的一些方法。

    一、基本思想

    应用层的性能优化通常可以从以下几个方面考虑:

    1. 了解编程语言的编译原理,使用高效编码方式从语法上提高程序性能;
    2. 采用合理的数据结构和算法提高程序性能,这往往是决定程序性能的关键;
    3. 重视界面布局优化;
    4. 采用多线程、缓存数据、延迟加载、提前加载等手段,解决严重的性能瓶颈;
    5. 合理配置虚拟机堆内存使用上限和使用率,减少垃圾回收频率;
    6. 合理使用native代码;
    7. 合理配置数据库缓存类型和优化SQL语句加快读取速度,使用事务加快写入速度;
    8. 使用工具分析性能问题,找出性能瓶颈;

    当然肯定还有很多其他的性能优化方法,此处仅列出一些经常会用到的方法。限于篇幅,以下会对其中一部分内容做介绍,希望能够对大家做性能优化工作有所帮助。

    二、编程技巧

    (一)Performance Tips (For Java)

    Google官网上有一些关于应用程序性能提升的技巧,之前公司内也有很多总结提到过,在此简单罗列一下,详细内容可以从官网获取。

    http://developer.android.com/training/articles/perf-tips.html

    需要说明的是,文章列出的优化技巧主要是一些微小的性能提升,决定程序整体性能的仍然取决于程序的业务逻辑设计、代码的数据结构和算法。研发人员需要将这些优化技巧应用到平时的编码过程中,积少成多,也会对性能有很大的影响。

    写出高效的代码需要遵循两条原则:

    • 不执行不必要的操作;
    • 不分配不必要的内存;

    两条原则分别针对CPU和内存,完成必要操作的前提下尽可能的节省CPU和内存资源,自然执行效率要高。单纯这样说听起来很虚,毕竟没有一个统一的标准判断什么是必要和不必要的,需要结合具体情况具体分析了。

    1. 避免创建不必要的对象

    创建太多的对象会造成性能低下,这谁都知道,可是为什么呢?首先分配内存本身需要时间,其次虚拟机运行时堆内存使用量是有上限的,当使用量到达一定程度 时会触发垃圾回收,垃圾回收会使得线程甚至是整个进程暂停运行。可想而知,如果有对象频繁的创建和销毁,或者内存使用率很高,就会造成应用程序严重卡顿。

         2.合理使用static成员

    主要有三点需要掌握:

    • 如果一个方法不需要操作运行时的动态变量和方法,那么可以将方法设置为static的。
    • 常量字段要声明为“static final”,因为这样常量会被存放在dex文件的静态字段初始化器中被直接访问,否则在运行时需要通过编译时自动生成的一些函数来初始化。此规则只对基本类型和String类型有效。
    • 不要将视图控件声明为static,因为View对象会引用Activity对象,当Activity退出时其对象本身无法被销毁,会造成内存溢出。
    1.       避免内部的Getters/Setters

    面向对象设计中,字段访问使用Getters/Setters通常是一个好的原则,但是在Android开发中限于硬件条件,除非字段需要被公开访 问,否则如果只是有限范围内的内部访问(例如包内访问)则不建议使用Getters/Setters。在开启JIT时,直接访问的速度比间接访问要快7 倍。

    1.       使用for-each循环

    优先使用for-each循环通常情况下会获得更高的效率;除了一种情况,即对ArrayList进行遍历时,使用手动的计数循环效率要更高。

    1.       使用package代替private以便私有内部类高效访问外部类成员

    私有内部类的方法访问外部类的私有成员变量和方法,在语法上是正确的,但是虚拟机在运行时并不是直接访问的,而是在编译时会在外部类中自动生成一些包 级别的静态方法,执行时内部类会调用这些静态方法来访问外部类的私有成员。这样的话就多了一层方法调用,性能有所损耗。

    一种解决这个问题的方法就是将外部类的私有成员改为包级别的,这样内部类就可以直接访问,当然前提是设计上可接受。

    1.       避免使用浮点类型

    经验之谈,在Android设备中浮点型大概比整型数据处理速度慢两倍,所以如果整型可以解决的问题就不要用浮点型。

    另外,一些处理器有硬件乘法但是没有除法,这种情况下除法和取模运算是用软件实现的。为了提高效率,在写运算式时可以考虑将一些除法操作直接改写为乘法实现,例如将“x / 2”改写为“x * 0.5”。

    1.       了解并使用库函数

    Java标准库和Android Framework中包含了大量高效且健壮的库函数,很多函数还采用了native实现,通常情况下比我们用Java实现同样功能的代码的效率要高很多。所以善于使用系统库函数可以节省开发时间,并且也不容易出错。

    (二)布局性能优化

    布局直接影响到界面的显示时间。关于界面布局的性能优化在技术上并没有难点,个人认为最重要的是是否认识到布局优化的重要性。起初我也会觉得布局本身 不会是性能瓶颈,并且也很难优化,好不容易写了复杂的布局文件,或者原生代码就是那样,而且也用log查看了setContentView的时间,似乎没 什么问题,实在是不想去研究。但实际上布局问题没有想象的那么简单。

    布局的性能优化之所以重要,因为以下两个方面:

    •          布局文件是一个xml文件,inflate布局文件其实就是解析xml,根据标签信息创建相应的布局对象并做关联。xml中的标签和属性设置越多,节点树的深度越深,在解析时要执行的判断逻辑、函数的嵌套和递归就越多,所以时间消耗越多;
    •       inflate操作只是布局影响的第一个环节,一个界面要显示出来,在requestLayout后还要执行一系列的measure、 layout、draw的操作,每一步的执行时间都会受到布局本身的影响。而界面的最终显示是所有这些操作完成后才实现的,所以如果布局质量差,会增加每 一步操作的时间成本,最终显示时间就会比较长。

    那么布局如何优化?总结如下几点:

    1. 遵循一条规则:布局层次尽量少

    也就是说,在达到同样布局效果的前提下,xml文件中树的深度尽量的潜。要做到这一点需要合理的使用布局控件:

    • 典型的情况是你可以使用RelativeLayout来代替LinearLayout实现相同的布局效果;
    • 还有一种是如果布局树的A节点只有一个子节点B,而B只有一个子节点C,那么B通常是可以去掉的;
    • 合理的使用<merge>标签,如果布局X可以被include到Y中,那么需要考虑X的根节点是否可以设置为<merge>,这样在解析时会将<merge>的子节点添加到Y中,而<merge>本身不会添加。
    1. 使用Lint分析布局

    Lint是SDK中tools目录下的工具,ADT中集成了Lint的可视化控制界面。用Lint扫描应用程序,它会从很多方面对应用进行分析,并提示那些可能有缺陷的地方,其中就包含与性能相关的内容。你可以在Google官网上了解详细信息。

    http://developer.android.com/tools/debugging/improving-w-lint.html

    http://developer.android.com/tools/help/lint.html

    1. 使用HierarchyViewer分析布局

    HierarchyViewer(以下简称HV)也是SDK中tools目录下的工具,ADT中也集成了HV的可视化控制界面。可以使用HV查看当前界面的布局,它能提供很多信息,其中有两个可以帮助我们分析性能问题:

    •          HV的树视图展现了视图控件的相互关系,可以用来检查是否有第1点中提到的情况。
    •         树视图中可以显示每个节点measure、layout、draw的时间,并且每一项用一个圆点表示其耗时是否正常,每个圆点分别用绿色、黄色、红 色表示耗时正常、警告、危险,这样就可以很方便的找到有性能瓶颈了。如果树视图中没有显示这些时间,你可以点击“Obtain layout times for tree rooted at selected node”按钮刷新界面显示。

    http://developer.android.com/tools/debugging/debugging-ui.html

    1.       使用ViewStub延迟加载视图

    ViewStub是一个没有尺寸大小并且不会在布局中嵌套或渲染任何东西的轻量级的视图。如果界面中有一部分视图控件不需要立即显示,则可以将其写到 一个单独的layout文件中,用ViewStub标签代替,当要真正显示这部分内容时再通过ViewStub将视图加载进来。

    http://developer.android.com/training/improving-layouts/loading-ondemand.html

    三、工具使用

    遵循好的编码习惯可以让程序执行更有效率,但是实际运行时仍然会遇到各种各样的性能问题。幸好有很多强大的工具能帮助我们分析性能瓶颈,找到问题所 在。以下介绍的工具想必大家已经很熟悉了,网上有很多相关文章写的都很不错,在此不再赘述,仅对这些工具在使用时的一些关键点做一些说明。关于这些工具的 详细使用方法请见网上的一篇文章:http://blog.csdn.net/innost/article/details/9008691

    (一)Traceview

    做性能优化的最直接的方法,就是复现有性能问题的场景,并监控此过程中程序的执行流程,如果能够方便的分析程序中函数的调用关系和执行时间,自然也就很容易找出性能瓶颈了。

    Traceview就是用来分析函数调用过程的工具,利用它可以方便的分析性能问题。它的使用方式需要以下几步:

    • 使用Android的Debug API,或者DDMS监控程序运行过程;
    • 复现有性能问题的场景,用第1步的方法获取程序过程中的函数调用日志文件,即trace文件;
    • 使用Traceview导入trace文件即可;

    Traceview的界面很直观,但是在分析过程中需要特别注意以下几点:

    1. Profile Panel中的各列的含义
    • Incl – 指函数本身和内部嵌套的其他函数的执行时间;
    • Excl –  指函数本身,不包含内部嵌套的其他函数的执行时间;
    • Cpu Time – 指函数执行时所占用的CPU时间片的总和,不包含等待调度的时间;
    • Real Time – 指函数执行过程的真实时间,包含等待调度的时间;
    • Cpu Time/Call – 指函数平均每次调用的CPU时间;
    • Real Time/Call – 指函数平均每次调用的真实时间;
    • Calls+Recur Calls/Total – 指函数调用的总次数+递归调用次数百分比;
    • % – 带有%的列是指函数的执行时间占总采样时间的百分比;
    1. 如何分析性能瓶颈

    首先通常需要关心的是CPU时间,可以找出程序自身的问题,真实时间会受到系统其他因素的影响。然后可以从四个方面进行分析:

    1)分析有哪些函数单次执行时间长

    可以点击“Cpu Time/Call”一列,按照降序排列,并找出那些执行时间相对较长同时也是我们关心的函数,然后再查看其函数内部的详细执行过程;

    2)分析有哪些函数调用次数过多

    可以点击“Calls+RecurCalls/Total”一列,按照降序排列,并找出哪些执行次数相对较多同时也是我们关心的函数,然后再查看其函数内部的详细执行过程;

    3)分析有哪些函数总执行时间长

    有些函数的单次执行时间不是特别长,总调用次数也不是特别多,但是二者相乘得出的总的执行时间较长,可以点击“Incl Cpu Time”,按照降序排列,找出这些函数;

    4)有时我们很明确需要查看一些特定类的特定方法,可以在页面最下方的搜索条中搜索,不过好像只支持全小写输入。

    1.       提示一点:利用API或工具采样trace信息时,会禁用JIT功能,同时因为采样本身也需要占用系统资源,所以用Traceview查看函数的执行时间都要比正常运行时慢不少,我们只要关心相对的时间消耗即可。

    (二)dmtracedump

    trace文件除了可以用TraceView分析外,还可以利用另外一个工具dmtracedump,它的功能也很强大。如果你觉得在Traceview中查找类和函数很痛苦,不妨试试这个工具。

    dmtracedump是SDK的tools目录下的可执行文件,你可以查看它的帮助信息,并执行类似如下的命令:

    dmtracedump -h -g tracemap.png path-to-your-trace-file > path-to-a-html-file.html

    然后就可以得到两样东西,一个是各函数调用的树状图,可以一目了然的查看函数关系;另一个是可操作的html的文件,用浏览器打开就可以方便的查找你关心的类或函数。

    (三)systrace

    Systrace是从4.1引入的一个强大的性能分析工具,依赖于Kernel的ftrace功能,可以对系统中很多重要模块,特别是图形显示模块做 性能分析。它功能包括跟踪系统的I/O操作、内核工作队列、CPU负载以及Android各个子系统的运行状况等。

    Systrace的使用方法也是需要先通过Android提供的API或者DDMS开启跟踪监控模式,然后运行程序生成日志文件,最后分析日志文件即 可。Systrace输出的是一个html文件,直接用浏览器查看即可。如果你使用最新版本的ADT,可以很方便的通过界面操作,不用再用命令了。更详细 的内容可以在网上搜索。

    四、关于性能优化的思考

    性能优化是一个很大的话题,除了讨论如何优化外,还有一个更重要的就是是否需要优化。早在几十年前,就有很多关于性能优化的讨论,然后得出一个深刻的 真理:优化更容易带来伤害,而不是好处,特别是不成熟的优化。在优化过程中,你产生的软件可能既不快速,也不正确,而且还不容易被修正。

    不要因为性能而牺牲合理的结构。努力编写好的程序而不是快的程序。

    但是,这并不意味着,在完成程序之前你就可以忽略性能问题。实现上的问题可以通过后期的优化而被改正,但遍布全局并且限制性能的结构缺陷几乎是不可能 被改正的,除非重新编写程序。在系统完成之后再改变你的设计的某个基本方面,会导致你的系统结构病态,从而难以维护和改进。因此你应该在设计过程中考虑性 能问题。

     

    努力避免那些限制性能的设计。考虑你的代码设计的性能后果。为获得好的性能而对代码进行曲改,是一个非常不好的想法。在每次做优化之前和之后,需要对性能进行测量。

  • Android UI 优化-使用theme 预加载

    http://www.oschina.net/question/54100_34081

    在很多时候,我们需要给一个Layout设置一个背景。例如,我们下下面的layout中使用了这样一个背景:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    <?xml version=”1.0″ encoding=”utf-8″?>
    <LinearLayout xmlns:android=”http://schemas.android.com/apk/res/android”    android:orientation=”vertical”
    android:layout_width=”fill_parent”
    android:layout_height=”fill_parent”
    android:background=”@drawable/antelope_canyon”>
    <TextView android:text=”@+id/TextView01″
    android:id=”@+id/TextView01″
    android:layout_width=”wrap_content”
    android:layout_height=”wrap_content” >
    </TextView>
    </LinearLayout>

    其中的LinearLayout使用了 背景图片antelope_canyon。

    如果仔细观察程序的运行过过程,我们首先看到了黑色的activity背景,然后才看到背景图被加载,那是因为在activity start以后,我们才能调用setContentView设置我们的layout,然后才绘制我们在layout中放置的背景图。而在此之前,程序中绘 制的是android中默认黑色背景。 这样会给用户感觉我们的activity启动较慢。
    然而,如果将背景图定义在一个主题中,如下:

    1
    2
    3
    4
    5
    6
    7
    <?xml version=”1.0″ encoding=”utf-8″?>
    <resources>
    <style name=”Theme.Droidus” parent=”android:Theme”>
    <item name=”android:windowBackground”>@drawable/antelope_canyon</item>
    <item name=”android:windowNoTitle”>true</item>
    </style>
    </resources>

    然后在activity中使用这个主题 :

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    <?xml version=”1.0″ encoding=”utf-8″?>
    <manifest xmlns:android=”http://schemas.android.com/apk/res/android”
    package=”com.droidus”
    android:versionCode=”1″
    android:versionName=”1.0″>
    <application android:icon=”@drawable/icon” android:label=”@string/app_name”>
    <activity android:name=”.SpeedUpStartupActivity”
    android:label=”@string/app_name”
    android:theme=”@style/Theme.Droidus”
    >
    <intent-filter>
    <action android:name=”android.intent.action.MAIN” />
    <category android:name=”android.intent.category.LAUNCHER” />
    </intent-filter>
    </activity>
    </application>
    <uses-sdk android:minSdkVersion=”4″ />
    </manifest>

    运行程序,可以看到背景图马上显示了,没有再看到黑色的背景图。

    为什么会有这样的现象呢?那是因为 程序的主题是在程序启动的时候加载的,而不是在activity启动之后加载!
    而如果在layout使用背景,背景图是在activity启动之后才加载,故而会让用户看到一个黑色背景闪动的过程。

  • Top 10 questions about BSD Licenses

    http://www.whitesourcesoftware.com/top-10-bsd-license-questions-answered/

    After covering your top 10 questions about the GPL, the Apache 2.0 License, the Ms-PL, and the CDDL, today we’re answering your top questions about BSD Licenses.

    BSD Licenses or the original BSD License and its two variants — the Modified BSD License (3-clause), and the Simplified BSD License/FreeBSD License (2-clause) are a family of permissive free software licenses. Due to their permissive nature, they have very relaxed conditions about redistributing software licensed under them.

    1. What are the terms and conditions of the BSD Licenses?

    The BSD License lets you freely modify and distribute your software’s code in the source or binary format as long as you retain a copy of the copyright notice, list of conditions, and the disclaimer.

    The original BSD License or the 4-clause BSD License also contains an advertising clause and a non-endorsement clause (detailed explanation about these clauses are offered in the following questions). The modified BSD License or the 3-clause BSD License was formed by removing the advertising clause from the original BSD License. Further, the FreeBSD version or the 2-clause BSD License was formed by removing the non-endorsement clause from the modified BSD License or the 3-clause BSD License.

    2. What is the difference between the original 4-clause BSD License and the Modified 3-clause BSD License?

    The advertising clause from the original BSD License requires users to acknowledge the original authors of any used BSD-licensed components in all advertising materials mentioning features or use of their software. This clause was criticized for several reasons. It also made the original BSD License incompatible with the GNU GPL.

    Basically the BSD License authors expected developers to include the following acknowledgement in their copyright notices.

    However, due to misunderstanding the license (and even with malice intention, in some cases), developers started replacing the above acknowledgement text by adding their own or their organizations’ names.

    This led to situations where developers were required to list too many attributions, each corresponding to a used BSD-licensed component in their software.

    Following the feedback, in 1999, the advertising clause that appears in the original BSD License was removed to create the Modified 3-clause BSD License.

    3. What is the difference between the Modified 3-clause BSD License and Simplified 2-clause BSD License?

    The Simplified 2-clause BSD License further toned down the 3-clause BSD License by removing the non-endorsement clause. This clause ensured that users could not make it sound like their software was endorsed by any of the acknowledged developers or organizations.

    It also introduced a disclaimer about views and opinions expressed in the software to be those of the authors and not of the FreeBSD project.

    4. Are the BSD Licenses considered copyleft?

    Copyright is a law that restricts the right to use, modify, and share creative works without the permission of the copyright holder. When an author releases a program under a copyleft license, he makes a claim on the copyright of the work and issues a statement that other people have the right to use, modify, and share the work as long as the reciprocity obligation is maintained.

    The BSD License family doesn’t impose the reciprocity clause, you’re free to redistribute your code as you like. The BSD Licenses are highly permissive and don’t have any strict terms governing their software redistribution.

    5. Are the BSD Licenses compatible with GPL?

    As mentioned earlier, it was the advertisement clause in the original BSD license that made it incompatible with the GNU GPL. The newer versions of the original BSD licenses, i.e., the 3-clause and the 2-clause variants are compatible with GPL.

    6. What are the differences between the Modified BSD License and the GPL?

    The GPL is copyleft. It requires you to disclose your source code and make the modified version open source as well. It also forbids you from sub-licensing, meaning that you can’t change any of the original license terms or introduce any of your own. You’re also required to state all the changes you make to the original code.

    The BSD license family (including the Modified BSD License), on the other hand, doesn’t compel you to do any of the above. They have fairly relaxed redistribution terms.

    7. What are the differences between the Modified BSD License and the Apache 2.0 License?

    Both the newer BSD Licenses as well as the Apache 2.0 License are permissive in nature, allowing easy redistribution. In fact, the earlier versions of the Apache License were identical to the original (and later the modified) BSD licenses, but Apache License 2.0 sets them apart.

    The Apache License 2.0 explicitly lays down the grant of patent rights while using, modifying or distributing Apache licensed software; it also lists the circumstances when such grant gets withdrawn.

    It also has stringent terms when it comes to modifications. It requires you to explicitly list out all the modifications that you’ve done in the original software, i.e., you’re required to preserve modification notices. The Apache License also states clearly that you can’t name your product in any way that hints at the product being endorsed by Apache. So you can call your product “SuperWonderServer powered by Apache” but not “Apache SuperWonderServer”.

    The Modified BSD License doesn’t impose any such terms or grant explicit patent rights.

    8. What are the differences between the Modified BSD License and the MIT License?

    MIT is one of the most permissive free software licenses. Basically, you can do whatever you want with a software licensed under the MIT license – only if you add a copy of the original MIT license and copyright notice to it. Its simplicity is the reason behind its high adoption rate among developers.

    If you use the MIT license, you can use it as-is. But if you use any of the BSD licenses, you’re still required to modify the license copy to suit the project at hand.

    Besides, the Modified BSD License, thanks to its non-endorsement clause, protects you from having your name involved in a project unless you want to.

    9. Do the BSD Licenses grant patent rights?

    The BSD licenses don’t grant any patent rights. You can contrast this with the Apache 2.0 License, where the license explicitly lists its patent terms. It clearly lays down the grant of patent rights while using, modifying or distributing Apache licensed software; it also lists the circumstances when such grant gets withdrawn.

    The BSD Licenses, on the other hand, just grant a copyright license. While licensing your component, you will have to take care of the patents yourself.

    10. Can I combine BSD-licensed components with proprietary code or code licensed under other open source licenses?

    Yes. The permissive nature of the BSD licenses allows you to combine BSD-licensed components with proprietary or open source software. But be sure to check the compliance terms of the licenses of the code that you’re looking to merge with.

    Like if you have licensed your component under the original BSD license, it won’t be compatible with code licensed under the GNU GPL. Consider the compatibility issues carefully while combining.

    So that’s about it for ten of your top Berkeley Software Distribution Licenses (BSD) questions answered. Do you have any more? I would be happy to find the answers for you.

     

    The author of this blog is not a lawyer, and you should not interpret this as legal advice of any kind. Information is provided on an as-is basis. For a legal consultation, please contact your legal advisor.

    Rami Sass

    Rami Sass

    CEO and co-founder
  • Hash Function

     

    • std::hash – C++11 standard library hash function
    • MurmurHash3 – Well known and used hash function
    • SpookyV2 – Alternative to Murmurhash3
    • Google Cityhash – Google attempt to improve on Murmurhash3
    • Google Farmhash  – Recent Google successor to Cityhash
    • cfarmhash – C port of Google Farmhash Hash64

     

     

  • build android kernel & sdk

    # List branches of rep
    git ls-remote file:///mirror/git/aosp/platform/manifest

    # Checkout Local copy
    repo init -u file:///mirror/git/aosp/platform/manifest
    repo sync -j18

    # List branches of local copy
    git –git-dir .repo/manifests/.git/ branch -a

    # Change branch
    repo init -b android-6.0.0_r5
    repo sync -j18

    # install tools
    sudo apt-get install git gnupg flex bison gperf build-essential zip curl zlib1g-dev libc6-dev lib32ncurses5-dev ia32-libs x11proto-core-dev libx11-dev lib32readline5-dev lib32z-dev libgl1-mesa-dev g++-multilib mingw32 tofrodos python-markdown libxml2-utils xsltproc

    # Install Oracle jdk1.7.0.xx into /opt/jdk1.7.0, and export

  • 密码保护:Selection

    此内容受密码保护。如需查阅,请在下列字段中输入您的密码。