AppInfo

Android Service原理分析之startService(一)

萝らか妹 提交于 2020-12-19 06:28:05
1. Service概述 Service作为Android四大组件之一,在开发过程中非常常用,它虽然没有ui,但是同样可以在后台做很多重要的事情,我们平时使用启动service主要通过startService以及bindService来启动service以便已经相关操作。本文将介绍startService的原理,后续将分别介绍bindService的原理,以及在Android O上对service的新增限制管控。 注:本文基于Android 8.1 2. Service分类 从启动方式上,可以分别通过startService以及bindService启动,两者之间最重要的区别在于bindService可以建立binder连接,更加方便通信。 从运行方式上,可以分为前台service(foregroundService,下面简称fg-service)与后台service,两者的区别在于有前台service的进程对应的优先级会更高,不容易被系统清理掉,但是前台service需要在通知栏里面显示一个常驻的通知。 3. startService时序图 startService的启动大致分为三种情况: 对应进程不存在(先启动进程然后启动service并执行onCreate和onStartCommand) 进程存在但是service不存在

Setter/Getter之争,有点意思

帅比萌擦擦* 提交于 2020-12-15 16:23:11
这几天在做 Code Review 的时候,发现 Model 层内大量 Bean 写法不一。 有些类是属性开放一路 public ,有些类则属性全部封闭 private 。 大家针对这个问题讨论得还挺激动,着实出乎意料。 听他们的说辞,观点都挺有 道理 的。 封闭派 支持者持以下观点。 Java 官方推荐针对实体类 Bean 进行封装,确保对外层调用者隐藏敏感数据。应该将类变量或属性声明为私有并提供公共获取及设置的方法,以便访问和更新私有变量的值。 的确。倘若一个属性是以 obj.field 的方式访问或直接赋值更新,当 field 的访问及更新逻辑需要调整时则得重新编写方法支持。 举个🌰。 一个包含直接访问及更新变量的类如下。 Class Obj{ public int value; } Obj obj = new Obj(); //使用属性直接访问或更新 obj.value = -1; int objValue = object.value; 而采用封闭开放原则编写的类为: Class Obj{ private int value; public void setValue(int value){ this.value = value; } public int getValue(){ return value; } } Obj obj = new Obj(); /

Apk应用安全加固所需了解的Application启动流程

一曲冷凌霜 提交于 2020-08-11 18:08:07
本文使用Android Q(API 29)版本源代码进行讲解 很多人认为Android应用加载入口是Application的onCreate,实则不然。当点击进入应用时,Zygote进程会fork出一个独立进程, 通过RuntimeInit#findStaticMain找到ActivityThread#main并在ZygoteInit#main中进行调用 郑州哪家不孕不育医院好:http://www.zztjby.com/ // ZygoteInit#main public static void main(String argv[]) { .... Runnable caller; try { .... // 最终会调用到findStaticMain caller = zygoteServer.runSelectLoop(abiList); } catch (Throwable ex) { .... } finally { .... } .... if (caller != null) { caller.run(); } } public class RuntimeInit { protected static Runnable findStaticMain(String className, String[] argv, ClassLoader classLoader) {

02Vulkan——应用程序架构与创建实例

流过昼夜 提交于 2020-08-07 21:33:49
1.总体结构 #include <vulkan/vulkan.h> #include <iostream> #include <stdexcept> #include <functional> class CApplicationTest { public: void run() { initVulkan(); mainLoop(); cleanup(); } private: void initVulkan() { } void mainLoop() { } void cleanup() { } }; int main() { CApplicationTest ApplicationTest; try { app.run(); } catch (const std::runtime_error& e) { std::cerr << e.what() << std::endl; return EXIT_FAILURE; } return EXIT_SUCCESS; } 头文件作用: 首先从 LunarG SDK 中添加 Vulkan 头文件,它提供了 Vulkan 应用程序需要的函数、结构体、和枚举。 stdexcept 和 iostream 头文件用于抛出异常信息,而 functional 头文件用于资源管理部分支持 lambda 表达式。 程序思路: 程序被封装到一个类中

解决Hystrix dashboard Turbine 一直 Loading…… 及其他坑

 ̄綄美尐妖づ 提交于 2020-07-28 18:59:42
问题一、请求 /hystrix.stream 报错,我这里以端口9001为例   请求 http://localhost:9001/hystrix.stream 报404       是因为Srping Boot 2.0以后仪表盘的默认路径不在是 /hystrix.stream,这时就需要我们自己去设置,在主类中添加以下代码:   @Bean public ServletRegistrationBean getServlet() { HystrixMetricsStreamServlet streamServlet = new HystrixMetricsStreamServlet(); ServletRegistrationBean registrationBean = new ServletRegistrationBean(streamServlet); registrationBean.setLoadOnStartup( 1 ); registrationBean.addUrlMappings( "/hystrix.stream" ); registrationBean.setName( "HystrixMetricsStreamServlet" ); return registrationBean; }    重启项目,访问 http://localhost:9001

python微信库 --- itchat

帅比萌擦擦* 提交于 2020-05-04 01:51:26
python实现微信接口——itchat模块 安装 pip install itchat 登录 itchat.auto_login() # 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短时间的登录,并不会保留登录的状态,也就是下次登录时还是需要扫描二维码 加入 hotReload==True # 那么就会保留登录的状态,至少在后面的几次登录过程中不会再次扫描二维码,该参数生成一个静态文件itchat.pkl用于存储登录状态 退出及登录完成后调用的特定的方法 这里主要使用的是灰调函数的方法,登录完成后的方法需要赋值在 loginCallback 中退出后的方法,需要赋值在 exitCallback 中.若不设置 loginCallback 的值, 将会自动删除二维码图片并清空命令行显示. import itchat, time def lc(): print ( " Finash Login! " ) def ec(): print ( " exit " ) itchat.auto_login(loginCallback =lc, exitCallback= ec) time.sleep() itchat.logout() # 强制退出登录 回复消息 send send(msg="Text Message", toUserName=None) 参数: msg :

python微信库 --- itchat

时间秒杀一切 提交于 2020-05-04 01:19:09
python实现微信接口——itchat模块 安装 pip install itchat 登录 itchat.auto_login() # 这种方法将会通过微信扫描二维码登录,但是这种登录的方式确实短时间的登录,并不会保留登录的状态,也就是下次登录时还是需要扫描二维码 加入 hotReload==True # 那么就会保留登录的状态,至少在后面的几次登录过程中不会再次扫描二维码,该参数生成一个静态文件itchat.pkl用于存储登录状态 退出及登录完成后调用的特定的方法 这里主要使用的是灰调函数的方法,登录完成后的方法需要赋值在 loginCallback 中退出后的方法,需要赋值在 exitCallback 中.若不设置 loginCallback 的值, 将会自动删除二维码图片并清空命令行显示. import itchat, time def lc(): print ( " Finash Login! " ) def ec(): print ( " exit " ) itchat.auto_login(loginCallback =lc, exitCallback= ec) time.sleep() itchat.logout() # 强制退出登录 回复消息 send send(msg="Text Message", toUserName=None) 参数: msg :

JAVA拦截器,JAVA返回结果跨域问题解决-has been blocked by CORS policy

徘徊边缘 提交于 2020-04-29 10:08:18
遇到的问题: 通过拦截器做权限控制,没有权限时返回了json值,结果前端请求时提示跨域了 备注:我的前端站点和后端站点不是一个地址 报错1: Access to XMLHttpRequest at 'http://localhost:8089/appcicd/appinfo/getappinfos' from origin 'http://localhost:8000' has been blocked by CORS policy: The 'Access-Control-Allow-Origin' header has a value 'http://localhost:8089/' that is not equal to the supplied origin. Index.js: 79 Error: Network Error at createError (createError.js: 16) 报错2: Access to XMLHttpRequest at 'http://localhost:8089/appcicd/appinfo/getappinfos' from origin 'http://localhost:8000' has been blocked by CORS policy: The value of the 'Access-Control

ORACLE 存储过程详解(转)

六月ゝ 毕业季﹏ 提交于 2020-04-25 08:14:43
一.在plsql中创建一个存储过程 本文转自 https://blog.csdn.net/zezezuiaiya/article/details/79557621 打开plsql,右键procedures,新建。 如果新建毫无反应 直接文件-新建-程序窗口-空白,新建一个程序窗口: 存储过程创建语法: create [ or replace] procedure 存储过程名(param1 in type,param2 out type) as 变量 1 类型(值范围); 变量2 类型(值范围); Begin Select count(*) into 变量 1 from 表A where列名=param1; If (判断条件) then Select 列名 into 变量 2 from 表A where列名=param1; Dbms_output。Put_line(‘打印信息’); Elsif (判断条件) then Dbms_output。Put_line(‘打印信息’); Else Raise 异常名(NO_DATA_FOUND); End if; Exception When others then Rollback; End; 二:实例:写存储过程(例子) --创建一个名为p_contract_purchase_import的存储过程 create or replace

logstash input 添加多个kafka报错解决

假如想象 提交于 2020-04-18 14:35:31
[WARN ][org.apache.kafka.common.utils.AppInfoParser] Error registering AppInfo mbean javax.management.InstanceAlreadyExistsException: kafka.consumer:type=app-info,id=test-0 logstash input 添加多个kafka会出现这个报错。是因为clientid唯一。 换了N个版本kafka和logstash 网上也找不到解决方法 记录一下解决方法 希望后面的同学们少走点弯路 解决方法 : 需要在logstash添加不同的client_id 配置文件如下 input { kafka { bootstrap_servers => "192.168.1.11:9092,192.168.1.12:9092,192.168.1.13:9092" client_id => "test1" topics => ["test1"] type => "test1" codec => 'json' } kafka { bootstrap_servers => "192.168.1.11:9092,192.168.1.12:9092,192.168.1.13:9092" client_id => "test2" topics => [