[Python]关于ctypes使用char*指针与bytes相互转换的问题

最近研究人脸识别,需要用python调用so动态库,涉及到c/c++中的指针字符串转Python的bytes对象的问题。
按照ctypes的文档,直观方式是先创建对应的类型数组,再将指针取地址一一赋值:

from ctypes import *
 
 
p=(c_char * 10)()
for i in range(10):
    p[i] = i
 
b=bytes(bytearray(p))
print(b)

搜寻了各种资料,都未能找到更好的。。。直到ctypes.string_at

_string_at = PYFUNCTYPE(py_object, c_void_p, c_int)(_string_at_addr)
def string_at(ptr, size=-1):
    """string_at(addr[, size]) -> string
 
    Return the string at addr."""
    return _string_at(ptr, size)

于是char*转bytes可以直接用string_at方法,传入指针地址,以及字符串长度即可。

同样的问题,bytes对象需要传给c/c++代码。。。
直观方式同样是创建char数组array,拷贝bytes之后,再用cast强制转换成c_char_p

from ctypes import *
 
 
p=(c_char * 10)()
for i in range(10):
    p[i] = i
 
m=cast(p, c_char_p)
print(m)

比较奇葩的是cast得到的对象,如果我们直接用bytes对象cast。。。

from ctypes import *
 
 
b=b'0123456789'
m=cast(p, c_char_p)
print(m)

吼吼,奇迹出现了,bytes对象cast成了char*指针。。。用string_at转换看看

string_at(m)

总结一下:
1、bytes基于Buffer Protocol,查看其c实现https://hg.python.org/cpython/file/3.4/Objects/bytesobject.c
2、string_as的c代码https://hg.python.org/cpython/file/3717b1481d1b/Modules/_ctypes/_ctypes.c

static PyObject *
string_at(const char *ptr, int size)
{
	if (size == -1)
		return PyString_FromString(ptr);
	return PyString_FromStringAndSize(ptr, size);
}

3、cast的c代码同样在_ctypes.c(https://hg.python.org/cpython/file/3717b1481d1b/Modules/_ctypes/_ctypes.c)

static PyObject *
cast(void *ptr, PyObject *src, PyObject *ctype)
{
	CDataObject *result;
	if (0 == cast_check_pointertype(ctype))
		return NULL;
	result = (CDataObject *)PyObject_CallFunctionObjArgs(ctype, NULL);
	if (result == NULL)
		return NULL;
 
	/*
	  The casted objects '_objects' member:
 
	  It must certainly contain the source objects one.
	  It must contain the source object itself.
	 */
	if (CDataObject_Check(src)) {
		CDataObject *obj = (CDataObject *)src;
		/* CData_GetContainer will initialize src.b_objects, we need
		   this so it can be shared */
		CData_GetContainer(obj);
		/* But we need a dictionary! */
		if (obj->b_objects == Py_None) {
			Py_DECREF(Py_None);
			obj->b_objects = PyDict_New();
			if (obj->b_objects == NULL)
				goto failed;
		}
		Py_XINCREF(obj->b_objects);
		result->b_objects = obj->b_objects;
		if (result->b_objects && PyDict_Check(result->b_objects)) {
			PyObject *index;
			int rc;
			index = PyLong_FromVoidPtr((void *)src);
			if (index == NULL)
				goto failed;
			rc = PyDict_SetItem(result->b_objects, index, src);
			Py_DECREF(index);
			if (rc == -1)
				goto failed;
		}
	}
	/* Should we assert that result is a pointer type? */
	memcpy(result->b_ptr, &ptr, sizeof(void *));
	return (PyObject *)result;
 
  failed:
	Py_DECREF(result);
	return NULL;
}

[个人所得税][抵扣]官网业务入口

https://its.tax861.gov.cn/
链接是国家税务总局北京市税务局的网站,包括专项附加扣除申报、纳税申报、完税证明查询、税收优惠备案。

提示:业务办理入口将于2019年1月以后开放,您可以先在系统中完善个人信息,便于业务开放后快速办理,如您着急办理,可前往本地办税大厅咨询。

[养老金]个人整理归档

目前我国的社会保障体系有三种:

  • 城镇职工社会保险(俗称社保)
  • 城镇居民社会保险(俗称城居保)
  • 新型农村社会保险(俗称新农保)

后两者统称城乡居民社会保险。险种不同,缴费标准不同,相应的待遇也不同。

三种社会保险面向的人群不同

  • 城镇职工社会保险,面向在城市有工作单位的人群,参保人员的户籍可以是城镇的,也可以是农村的。
  • 城镇居民社会保险,面向的是无工作单位的城镇户籍的人群。
  • 新农保,面向的是无工作单位的农业户籍的人群。

保险类型不同

  • 城镇职工社会保险,指的五险,包括养老保险、医疗保险、失业保险、工伤保险和生育保险。其中养老保险、医疗保险和失业保险,这三种险是由企业和个人共同缴纳的保费,工伤保险和生育保险完全是由企业承担的。个人不需要缴纳。
  • 城镇居民社会保险,缴纳城镇居民养老保险和城镇医疗保险。
  • 新农保,缴纳新型农村养老保险和农村合作医疗。

城乡居民社保

  • 养老保险:无论是城镇的还是农村的都有不同缴费档次可供选择,一般100元/年到几千元/年不等,可以根据自己的实际情况选择缴费。有些地区支持60岁的人一次性补缴15年养老保险,费用9万多,退休后每月领800元-1300元左右。
  • 医疗保险:农村合作医疗一般是150元/年,城镇的也差不多,可能不同地区稍有差异。按年来算,不交费的年份不享受医疗保险。

领取养老金计算公式

  • 城镇职工社会保险,养老金由“个人账户养老金”和“基础养老金”两部分构成
      1、个人账户:个人账户养老金总额÷计发月数(50岁为195、55岁为170、60岁为139)
      2、基础养老:
      A、去年在岗职工月平均工资:北京市2016年在岗职工平均工资7080元/月。
      B、本人缴费指数:个人月工资/去年在岗职工月平均工资=7080元/7080元=1。
      C、缴费年限:缴费15年。
      计算公式:A * (1 + B) / 2 * C * 1%
      例如:7080 * (1 + 1) / 2 * 15 * 1% = 1062
  • 城乡居民养老保险
      月养老金=基础养老金+个人账户总额÷139
      基础养老金=标准为55元(今后随国家政策调整)+缴费满15年后每多缴1年基础养老金增加1元;
      个人账户总额=个人缴费+政府补贴+集体补助+社会和个人资助+上述金额产生的利息;
      计算系数=139(与城镇职工养老保险系数相同)。
      假如你今年16岁,每年按2000元标准缴费,连续缴费45年,年满60周岁时的月养老金标准=[55元+30(缴费满15年后每多缴1年基础养老金增加1元)]+{[(2000+30)×45年+0(集体补助、社会及个人资助等)]+利息(本次测算是按银行最新利率3%的不变数计算的复滚利息)}÷139= 1439.11元。

    2018年城乡居民养老保险的缴费档次从1月1日将作出相应的调整。与以前的相比,最新的城乡居民养老保险缴费档次标准为十档,并且加大了多缴多得的鼓励力度,凡是缴费年限超过15年,每多缴一年,基础养老金可以增加20元。其中,2018年城乡居民养老保险的缴费档次有了新的调整,其缴费标准为:500元、700元、900元、1100元、1300元、1700元、2300元、3300元、4300元和5300元;政府对应补贴标准为200元、250元、300元、350元、400元、450元、525元、575元、625元和675元。在2018年1月1日起,办理按月领取养老金的手续的人员,月计发的标准为850元(北京市标准),为了鼓励参保人员长期缴费,对累计缴费超过15年的参保人员,每超过一年,基础养老金增加20元。

国家最新2018年养老保险政策,惠及了农村的老人,如果你之前没有缴纳养老金,但只要你符合相关的条件,也能领取养老金.
1、必须是年满60周岁的,拥有农村户籍,现在可以凭借户口本和身份证,直接到地方社保局领取养老金,基础养老金每个月55元。
2、同样户籍必须是农村,没有到60周岁,但是已经年满45周岁,只要把剩余年份的养老保险金交齐,您在60周岁时,可以同等享受养老金,具体缴纳标准和领取标准,每个省市和地方均有不同,可以详细参考本地区社保局。

在前两年,我国有很多地区都已经出台了一次性补缴养老保险的规定
只要年满60周岁(女性为55周岁)的农民朋友都可以一次性缴纳15年的养老保险,并在每个月领取一定金额的养老金。
一次性补缴15年的养老保险参保费用只需要9万元,并且每月能拿到800—1400元左右的养老金,相当于每年年收益率达到200%,这笔钱对于年过花甲的农村老人来说的话,基本生活得到很好的保障已然不成问题了。
以广东省为例,农户一次性缴纳十五年的养老保险需要9万多元,这样在60岁之后,每个月便可以领取1200元的养老金。

职工养老保险现在是不允许补缴了,2016年人社部下发了132号文件,关于加强养老保险基金收支管理工作的通知,明确要求不允许以灵活就业人员补缴的方式增加缴费年限。

2018年1月1日起,全国城乡居民基本养老保险基础养老金最低标准提高至每人每月88元,即在原每人每月70元的基础上增加18元。提高标准所需资金,中央财政对中西部地区给予全额补助,对东部地区给予50%的补助。

城乡居民养老保险跨入新时代

参考华容市的养老金政策以及实施标准
http://www.hbhr.gov.cn/dgiShow.aspx?iid=740
企业职工的要看湖南省政府政策
http://www.huarong.gov.cn/33159/37006/37008/37028/37187/content_1338115.html

[北京市积分落户]租房备案

转载:http://www.breaa.cn/WEB/NewsCenter/news_info.aspx?news_id=432&type_id=2

关于住房租赁合同登记备案常见问题解答
1.承租人(租客)与出租人(房东)自行签订的住房租赁合同能不能备案,如何备案?

答:能备案。不通过房地产经纪机构,承租人直接与出租人签订住房租赁合同,又称手拉手成交或自行成交。租赁双方可通过北京市住房租赁服务平台(http://rent.breaa.cn/manage/Login.html)办理租赁登记备案。

方式一:到254家便民服务点办理登记备案,服务点名单和位置查询网址为:http://www.breaa.cn/
进入网站后找到办事指南,点击住房租赁备案便民服务点门店分布及联系方式,即可查看。

方式二:到各区的住房租赁登记备案业务管理机构登记备案。

2.通过房地产经纪机构签订的住房租赁合同如何进行登记备案?

答:通过房地产经纪机构签订住房租赁合同,又称中介成交,要根据房地产经纪机构的情况办理租赁登记备案。

第一种是通过链家、自如、蛋壳公寓、我爱我家签订的住房租赁合同,由成交的经纪机构通过自建的租赁服务平台办理登记备案;

第二种是通过其他经纪机构签订的住房租赁合同,由成交的经纪机构用钥匙盘通过北京市住房租赁服务平台办理登记备案。

3.住房租赁登记备案记载的信息应当包含哪些内容?

答:(1)出租人的姓名(名称)、身份证件种类及号码;

(2)承租人的姓名(名称)、身份证件种类和号码;

(3)出租房屋的坐落、租赁金额、租赁期限;

(4)其他需要记载的内容。

4.办理住房租赁登记备案,住房租赁当事人应当提交哪些材料?

答:(1)住房租赁合同;

(2)住房租赁当事人身份证明;

(3)房屋所有权证书或者其他合法权属证明;

(4)直辖市、市、县人民政府建设(房地产)主管部门规定的其他材料。

5.北京市住房租赁服务平台合同备案如何查询?

答:通过北京市住房和城乡建设委员会网站的查询服务栏目中找到住房租赁备案查询,填写查询人和姓名、证件号码、备案编号、手机号及验证码查询,网址:
http://www.bjjs.gov.cn/bjjs/fwgl/index.shtml#zfzlba。

6.住房租赁合同登记备案有什么效力?

答:登记备案的住房租赁合同具有对抗第三人的效力,即当出租人就同一住房订立数份住房租赁合同,在合同均有效的情况下,承租人主张履行合同的,已经办理登记备案手续的优先于非登记备案的,除非非登记备案的承租人已经合法占有租赁住房。

7.住房租赁合同登记备案可享受什么公共服务?

答:进行住房租赁合同登记备案可作为承租人享受相应公共服务的佐证材料,目前承租人申请租金补贴(须符合公共租赁住房货币化补贴条件)、办理积分落户、子女就近入学需经过住房租赁合同登记备案,今后政府还将增加的许多公共服务也需提供住房租赁合同登记备案证明。

[北京市积分落户]本市积分落户进入公示落户阶段

来源:北京市人力资源和社会保障局网站
日期:2018-10-15 15:14

为落实国家户籍制度改革要求,本市2018年首次实施积分落户政策。在广大市民的理解、支持和配合下,申报、审核、复查各阶段工作顺利开展。即日起,2018年申报积分落户的124657名申请人可登录积分落户在线申报系统查看本人积分结果。按照本市积分落户管理办法关于落户规模统筹考虑城市承载能力和人口调控目标的要求,经市政府研究决定,2018年本市确定的积分落户规模为6000人,对应的最低分值为90.75分,按照同分同落原则,实际公示名单共6019人。在本市积分落户管理办法试行期间,年度落户规模将保持在6000人。由于每年申请人群规模和情况会有变化,每年达到积分落户规模的实际分值会有所不同。

  此次面向社会公示的落户人员主要呈现以下特点:一是在京稳定工作时间长,体现了长期在京工作的要求。二是年龄跨度大,中青年占主体。其中年龄最大的58岁,年龄最小的31岁。三是行业分布广。申请人来自科技服务、制造、金融、媒体、教育医疗、环卫、园林绿化、家政服务等各行业。四是获得奖励加分人员更具优势,如100分(含)以上高分段人员中35.8%来自高新技术企业,23.4%获得创新创业奖项,12人获评省部级以上劳动模范。

  拟取得落户资格的人员名单将在市政府“首都之窗”网站公示,公示期截止到2018年10月22日。经公示无异议的,可在2018年10月23日至2020年12月31日期间,按照有关规定办理本市常住户口。对公示名单上的人员如有异议,可以在公示期内向相关部门实名书面反映。经查证反映问题属实的,取消落户资格。本市积分落户要求诚信申报,根据积分落户管理办法规定,对违反诚信申报的申请人和用人单位要严肃追责,构成犯罪的依法追究刑事责任。

  从本市积分落户工作部门了解到:取得落户资格的申请人还需要提交现户籍地公安机关出具的无刑事犯罪记录证明。请拟取得落户资格的申请人注意安排好时间,联系现户籍地公安部门开具,取得无刑事犯罪记录证明后,方可办理本市常住户口。

  本市积分落户在政策试行期间每年申报一次。2018年未取得落户资格、2019年继续符合政策规定的四项资格条件的申请人,只需登录积分落户在线申报系统查看上一年度申报信息,选择更新需要变更的内容,其他无变化信息不用重新填报,系统将予以保留。2019年的申报工作预计将于5月份进行。

  该部门负责人特别表示:“今年是本市首次开展积分落户申报工作,感谢社会各界对政府各部门工作的理解和支持,我们将在总结今年经验的基础上,进一步完善流程,方便市民办理。”

[北京市积分落户][转载]北京,我爱你

北京积分落户,真的是馅饼吗?

如果是2015年,甚至2017年,遇到这样的问题,估计绝大多数北漂的回答应该是一样的。北京积分落户,有可能真的是馅饼,闻起来可能真的很香,但是未知的数量,对于数以百万计的北漂来说,基本属于可遇不可求的美梦而已。

从踏入北京的那一刻起,对于我们来说,“外来务工人员”已经成了对于我们的描述语中最为客气的一种,不管你是中关村站柜台的蓝领,还是格子间写代码的码农,苏州街的白领、金融街的金领,对于没有户口的我们来说,都有一个共同的称谓:北漂!

既然是漂,就意味着漂泊,浮萍一样,没有根,一如我们几年一换甚至于一年几换的出租房一样。然而,在这种没有根系的漂泊中,无数年轻的我们默默的打拼,数年、乃至十数年如一日的奋斗在这片土地上,挥洒汗水,激扬青春!慢慢的,在我们的奋斗中,有了自己的小家,可能是在海淀黄庄的某个地下室,也可能是在昌平沙河的某个城中村。有了他(她),就有了所谓的家,有了责任,和更多打拼的动力。朝六晚九,我们认了,因为,我们还年轻,既然已经放弃了故土家乡,就只能在这片土地默默坚持!

每年回家,总有同学老友有意无意的调侃:来自首都北京的老同学!走一个,干一个,喝一个!好吧,伴随着一杯杯烈酒咽下去的,还有未能吐出口的各种苦涩,一如喉间的烈酒一般,在无数个辗转难测的夜晚里,慢慢的弥漫至整个灵魂!

有人说,人的一生有两次长大的机会,一次是,自己做了父母,另一次是,父母没了!

自己做了父母,就意味着你要放弃很多,所谓的放浪不羁、所谓的自由的灵魂,所谓的说走就走闯荡天涯的豪情,甚至于,他乡来了老友故知,都需要认真的考虑一下,是否能安排时间一次相见。

自己做了父母,也意味着你需要扛起更多。从她(他)呀呀坠地的那一刻起,你就不得不为了孩子的成长承担起更多的责任,抑或压力。好吧,弹指一挥间,她(他)即将离开父母的庇佑,走向幼稚园,然后,学前班、小学、初中、高中、大学,直至有一天,她(他)将几乎彻底的离开你,寻找到自己的另一半,开始另一段人生的旅程。

从来没有想到过,一次选择而疏忽的一纸户籍,竟然成了我们的前半生中最大的一道门槛,自己苦,也就罢了,离开学校了,只要愿意打拼,工作还是有的,社保也开始缴纳了,车子也可以摇号了,甚至于,经过轻易或者艰难的决断后,在四环五环六环或者环京有了自己所为的房子。

从来没有想到过,一纸户籍,竟然成为孩子的教育之路上最高的一道门槛,这道几乎无法逾越的门槛,也使得我们在努力工作的同时,再次为了这一纸籍册开启满血复活状态!

为了孩子能踏入法律规定的九年义务教育阶段的中学的大门,我们在努力工作的同时,利用所有能挤出来的时间,义无反顾的再入校园,就为了取得更高一点的学历,以争取能换得一纸籍册。当我们毕业了,满怀期望被您的一句超龄无法落户击的粉碎。

助理工程师,工程师,高级工程师,研究员,父辈们难以企及的职业资格证书,我们一一拿下,希望能通过人才引进,迈进您的家门,满怀期冀换来的是您的一句专业不符,档案不全的泼面冷水!

在所有的大门对我们这些老漂都已经彻底关闭的同时,积分落户政策,如久旱的田园中天空响起的一声惊雷,将无数深受户籍问题折磨的北漂们从几乎抑郁到窒息的噩梦中惊醒!

如果可以,我愿意代表124657名在2018年度完成申报的北漂,代表更多的数十万计因各种原因痛失2018年度申报机会的北漂,代表未来年度将逐渐符合申报条件的北漂,代表百万计的已经在北京工作多年但很可能永远无法满足申报条件的北漂们,向户籍制度改革的前驱们,向参与制定积分落户制度的政府工作人员和专家教授们,致以发自内心的敬意!

感谢你们,让数以百万计的北漂们在无尽的黑暗中看到了一丝光芒!哪怕,这一缕光芒是如此的微弱,离我们是如此的遥远,但,这对于在户籍魔障下为了孩子们的教育问题而苦苦挣扎了多年的我们来说,最起码,已经给了我们一丝丝的希望!

2018年4月11日,这注定是将载入史册的一天!经历了十多年甚至二十多年的苦苦等待以后,积分落户在历经三年的酝酿、准备,终于启动了正式申报流程。简单吗?如此的简单,和绝大多数北漂有关联的积分项目,无非是屈指可数的年龄、社保、学历、住房这四个选项。至于纳税、高新、荣誉等等,对于绝大多数北漂而言,基本属于可望而不可求的选项而已。

然而,这字面上如此简单的选项,已经足以代表了绝大身份北漂的前半生!而这如此简单的选项,却又足以决定绝大部分北漂的后半生。

踏过这道门槛,意味着孩子的教育之路会少去很多的坎坷,无数前辈们经历过的或者正在经历的骨肉分离、两地分居的情况可能会不再发生。

踏不过去,对于众多的北漂而言,即将面临这将最心疼的孩子送往老家,或者一个陌生的城市,从起两地难相见,无语泪凝噎!

如此简单的选项,简单的不超过200个字节的汉字、数字、字母,在我们的心中,却是如此的沉重!

初来北京,关于社保的政策相对宽松,导致我们前期在京多年没有社保,生生错失数年的社保加分,好吧,时间太久,找不回来了,我们认了。

为了孩子的教育,我们利用一切时间,努力学习,获得一纸学历,但是在系统中要扣除读书期间的社保和住房得分,好吧,一切为了公平,我们认了。

三年苦读,拿下的硕士学位因为没有学历,无法获得对应的加分,好吧,谁让我们没有放弃工作去读一个双证的全日制,我们认了。

工作多次变更,或者因为公司的各种原因导致社保断缴补缴,不计算对应的得分,我们,也认了。

相对那些没有缴纳生育险,或者近7年社保补缴超过5次,超龄、单证的北们来说,好像,我们已经是非常非常幸运的了。

你可知道,4月11日,6月4日,7月30日,9月4日,9月20日,这一个看似没有任何关联的日子里,有多少北漂在苦苦的等待!

不敢和孩子说,真的非常害怕,又是一场南柯一梦!

不敢和父母说,真的非常担心,苦盼的户口又成了他们最揪心的事情。

不敢和身边人说,毕竟,不是所有人都和你一样苦苦等待了如此漫长的时间。

从来没有如此认真的看一本小册子,《2018年度北京积分落户操作手册》!

从来没有如此虔诚的心情,在填报之前恨不得沐浴更衣熏香祈念!

从来没有如此为自己的理解能力而纠结,生怕一不小心填错一个数字而导致极为严重的后果!

如果所有的等待,最终能有一个相对美好的结果,哪怕后面还要提供北京市早就行文取消的符合计划生育证明,政策里早就不面向个体开具的无刑事犯罪记录证明等文件,我们也认了。

怕啊,真的非常的害怕啊!真的非常害怕最后的结果是,12.4万人最终从830万人里幸运的挤进系统,最终却只能在极为有限的落户名额面前彻底崩溃!

是的,你可以说,毕竟北京和其他任何一个城市都不一样,特大城市,人口压力已经非常的大了,所以,抱歉,指标有限!

是你,你可以说,早就制定了2030年人口长远规划,在未来的年度内常住人口总数不能突破2300万人。所以,抱歉,指标有限!

是的,你还可以说,我们的政策要充分借鉴其他特大型城市的经验,这是否也意味着,每年的指标也就N千人?

甚至于,你还可以说,今年是第一年,摸着石头过河,所以先拿出一两千的指标来趟趟路子。

一两千,三五千,七八千,这些数字,解释起来都是那样的合理。

一两万,三四万,五六万,甚至于符合7年社保的进了系统的都应该解决,所有的期盼也是那样的合理。

不是吗?在这个城市有稳定的职业,且连续缴纳社保年限已经长达7年以上,绝大多数人有自己的住房,绝大多数人的都是大专以上的学历,这样的个体,在国内任何一个城市都可以相对容易的获得户籍,为什么,在我们的伟大祖国的首都,一纸户籍却成了如此难以逾越的大山?

很难相信,那些因为户籍而不得不离开生于斯长于斯的城市,离开自己的父母,离开熟悉的学校和身边的小伙伴,去一个陌生的城市读书的孩子,他们的人生观、价值观会变得怎样的扭曲?

很难相信,那些因为户籍而不具备在京接受教育和参加高考,在父母的安排下远离我们伟大的祖国去异国他乡求学的孩子,他们长大以后是否依旧会歌唱“洋装虽然穿在身,我心依然是中国心”?

从4月到9月,众多北漂因为各种填报原因,和各区县的窗口人员以及各部门的热线电话人员,进行了无数次的沟通交流,对于前期工作中各部门的工作人员对于工作的认真和热情、仔细、耐心,我们表示衷心的感谢。

你们的努力和付出,使得我们对于积分落户工作,增加了一些信心,也因此而生出更多的期望。

当国内几乎所有一线、二线城市都已经几乎全面放开户籍桎梏的时候,我们也有足够的理由相信,我们伟大的首都北京一定会践行“爱国、创新、包容、厚德”的北京精神,敞开怀抱,接纳这些在京多年的个体为北京人。

毕竟,我们面对的,不是生硬的冷冰冰的数字,而是每一位在京多年,通过自己的不懈努力,为北京建设,为国家建设作出了积极贡献的个体。他们的存在,不会为北京的人口红线带来任何的压力。

通过给予一部分北漂一纸籍册,换来更多的北漂扎根北京,努力工作,积极纳税,避免了骨肉分离,于国于民有百益而无一害!

相信我们的政府,一定会从更高的角度去综合考量户籍制度改革问题。在此之前,真心希望北京的积分落户制度,作为首都户籍制度破冰的重要探索,步子迈的更大一些,覆盖面更广一些,给予的落户指标更多一些!

真心希望北京积分落户政策能真正有效的起到积极、正面的示范效应:解决一部分,稳住大部分,吸引一部分。能让广大的北漂从此政策中感受到获得感,拥有感,归属感。@国家发改委 @北京12345

是否真的看得到吃不到的馅饼,结果很快就要出来了,让我们拭目以待!

[Android][targetSdkVersion][API26]关于GooglePlay要求升级目标版本到26的神坑

事实证明Google的陷阱很深,俺被它简单的sdk变更文档给坑了……
链接:https://developer.android.com/distribute/best-practices/develop/target-sdk#prenougat

第一点:后台执行限制
第二点:通知渠道

所有切到后台的程序,google的Nexus上都会转入background标识,这时收到Push消息唤醒GCM来启动app……Duang,华丽的Exception让我欲生欲死:

    static void runIntentInService(Context context, Intent intent, String className) {
        Object var3 = LOCK;
        synchronized(LOCK) {
            if(sWakeLock == null) {
                PowerManager pm = (PowerManager)context.getSystemService("power");
                sWakeLock = pm.newWakeLock(1, "GCM_LIB");
            }
        }
 
        Log.v("GCMBaseIntentService", "Acquiring wakelock");
        sWakeLock.acquire();
        intent.setClassName(context, className);
        context.startService(intent);
    }

从上面GCM的代码context.startService,“当应用试图调用 startService() 而 startService 又被禁止时,startService() 会抛出异常。”

那么只能从两个方面解决了
1、程序持有前台通知
2、Android8.0不能使用GCM Push通知了

问题2替换push来源……你逗我玩么……
继续问题1,Android8.0前台通知,就是上面第二点,通知渠道的变化,拥有后台Service的app,通知栏位有消除不掉的提示,你的app正在运行中……

尼玛通知栏位的问题更严重,用户投诉差评,麻蛋这是要玩死我,只好将targetSdkVersion降级到24,移除代码中关于8.0的新特性部分代码,将问题搁置。。。

预知后事如何,请听下回分解