目录

  • 记录
  • 补充
  • 额外补充
  • 结构体
  • fork()系统调用的特性
  • 指针与const
  • 友元关系
  • 复杂度
  • 抽象类的规定
  • 常成员函数



记录

android 7.0
在服务正常运行时候,如果此时直接关闭app,结束进程,此时不会调用ondestroy,而是会调用onStartCommand,虽然很奇怪,但确实是这样的,感觉是服务设置了类似断线重连接的机制。
因此如何要实现程序一直运行服务,那么可以这个函数连进行服务是否存在判断,然后如果服务不存在了,直接进行服务的重启,即服务创建,然后服务重启,从而实现服务的一直有效。

判断服务是否存在
android防止service多次执行onStartCommand

第三方软件自启动代码
Android 启动第三方应用的几种方法(整理)【转】

开机自启动
添加链接描述

补充

该博文写于2021-11-22 20:40:16,当时由于接触Android studio也不久,因此整体都属于摸索阶段,现在再看android 中的server组件,其实也逐渐打消了之前的疑问,不得不感叹server在Android studio真是好用。

本博文提及的内容,包括server组件也在后面的博文中有出现,主要是实现进程保活自启动,与本博文记录的需求类似,如有需要,可以查看博文【java】 定时器+线程+自动唤醒APP函数+结束进程 +UDP收发 的工具函数封装,开发的守护进程软件也已经上传,可以直接下载使用。

android 怎么正在运行的应用进程 安卓app一直运行的方法_android studio


额外补充

核心部分就先到这!接下来,是一些个人平时整理的c++要点概要,如有需要可以进行阅读

结构体

  • 第一种是最基本的结构体定义, 其定义了一个结构体 A。
struct A  { int a;};
  • 第二种则是在定义了一个结构体 B 的同时定义了一个结构体 B 的变量 m。
struct B  { int b;}m;
  • 第三种结构体定义没有给出该结构体的名称, 但是定义了一个该结构体的变量 n, 也就是说,若是想要在别处定义该结构体的变量是不行的, 只有变量 n 这种在定义结构体的同时定义变量才行。
struct  { int c;}n;
  • 第四种结构体定义在第一种结构定义的基础上加了关键字typedef, 此时我们将struct D{int d}看成是一个数据类型, 但是因为并没有给出别名, 直接用 D 定义变量是不行的。 如 D test; ,不能直接这样定义变量 test。 但 struct D test; 可行。
typedef struct D  { int d;};
  • 第五种结构体定义在第四种结构体定义的基础上加上了别名 x, 此时像在第四种结构体定义中说得那样, 此时的结构体 E 有别名 x, 故可以用 x 定义 E 的结构体变量。 用 E 不能直接定义, 需要在前面加 struct,struct E test;
typedef struct E  { int e;}x;
  • 第六种结构体定义在第五种的基础上减去了结构体名, 但是若是直接使用 y 来定义该结构体类型的变量也是可以的。 如 y test;(常用)
typedef struct  { int f;}y;

fork()系统调用的特性

fork()系统调用是 Unix 下以自身进程创建子进程的系统调用, 一次调用, 两次返回, 如果返回是 0, 则是子进程, 如果返回值>0, 则是父进程(返回值是子进程的 pid) 。 还有一个很重要的东西是, 在 fork()的调用处, 整个父进程空间会原模原样地复制到子进程中, 包括指令, 变量值, 程序调用栈, 环境变量, 缓冲区, 等等。

指针与const

  • const A * 等价 A const * 。
  • 允许用 A * 赋值 A const * 。
  • 允许用 A* * 赋值 A const* const * 。
  • 不允许用 A* * 赋值 A const* * 。

友元关系

友元关系是单向的, 不是对称, 不能传递。

  • 关于传递性, 有人比喻: 父亲的朋友不一定是儿子的朋友。
  • 那关于对称性, 是不是: 他把她当朋友, 她却不把他当朋友? 如, 类 A 是类B 的友元, 类 C 是类 A 的公有派生类。 则类 C 不是类 B 的友元, 类 B 不是类 A 的友元

复杂度

  • vector 插入 ,该位置插入后后面的都要改变 O(n)
  • Set 底层红黑树 O(logn)
  • Hash_map 底层哈希表 O(1)
  • Deque 尾部可以直接修改 O(1)

抽象类的规定

  1. 抽象类只能用作其他类的基类, 不能建立抽象类对象。
  2. 抽象类不能用作参数类型、 函数返回类型或显式转换的类型。
  3. 可以定义指向抽象类的指针和引用, 此指针可以指向它的派生类, 进而实现多态性。

常成员函数

const void print(const int num)const
  • 第一个 const 修饰返回类型
  • 第二个 const 修饰参数
  • 第三个 const 修饰类的成员函数

常成员函数声明: 形如 void funcName(参数表) const;
对于常成员函数需要注意:

  1. 其实现部分也要带 const 关键字;
  2. 不能修改类的成员变量, 不能调用类中没有被 const 修饰的成员函数(即只能调用常成员函数) 。