博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Android 下 JNI 开发
阅读量:4047 次
发布时间:2019-05-25

本文共 1263 字,大约阅读时间需要 4 分钟。

12.C代码打印出日志

 

  

04_卸载之后打开Android浏览器问卷调查-26

fork分叉函数

 

fork分叉(分裂)函数可以创建一个新进程, 并且新创建出来的进程(子进程)拥有创建它的那个进程(父进程)的数据空间, 堆栈资源等的拷贝. 并且相互不影响. (跟fork炸弹原理一样)

 

返回值会返回两次, 但有三种情况:

在父进程中, fork返回新创建子进程的进程ID.大于0

在子进程中, fork返回0.

如果出现错误, fork返回一个负值.

 

 

  1. 该功能原理简介

 在程序没有卸载之前,调用C代码,去fork分叉出一个子进程;当程序被卸载时,这个子进程没有被立即关闭。这个子进程需要做的工作是:每一秒去查看/data/data/下是否有当前应用的包名,如果没有,被卸载了,打开浏览器,弹出一个页面,问卷调查用户卸载的原因。

 

  1. 实现思路归纳

 

1.声明native方法

2.在C语言中实现,里面去做fork分叉出一个子进程

3.子进程每隔1秒钟监听/data/data/当前包是否卸载

4.如果卸载了,调用Android浏览器

 

 

  1. 声明native方法

 直接在压力值项目中做。

 

public native void uninstallListener();

 

 

4.在C语言中实现,里面去做fork分叉出一个子进程,并演示

 

//此方法会创建一个进程,父进程会返回一个值,子进程也会返回一次值.

    int state = fork();

    if(state > 0){

        //当前是父进程

       LOGD("parent process=%d",state);

    }else if(state == 0){

       //当前是子进程

       LOGD("sup process=%d",state);

      

    }else{

       LOGD("Error");

    }

 

 

5.子进程每隔1秒钟监听/data/data/当前包是否卸载

//此方法会创建一个进程,父进程会返回一个值,子进程也会返回一次值.

    int state = fork();

    if(state > 0){

       //当前是父进程

       LOGD("parent process=%d",state);

    }else if(state == 0){

       //当前是子进程

       LOGD("sup process=%d",state);

       //监听当前应用是否卸载

       int isStop = 1;

       while(isStop){

           //每隔1秒钟判断应用目录是否存在

           sleep(1);

           //FILE *fopen(const char *, const char *);

           FILE* file = fopen("/data/data/ com.atguigu.pressuredemo","r");

           if(file == NULL){

              //当文件夹没有了,就是被卸载了

              LOGD("uninstalled ....");

              isStop = 0;

           }

       }

    }else{

       LOGD("Error");

    }

 

 

本教程由尚硅谷教育大数据研究院出品,如需转载请注明来源。

你可能感兴趣的文章
AngularJS2中最基本的文件说明
查看>>
从头开始学习jsp(2)——jsp的基本语法
查看>>
使用与或运算完成两个整数的相加
查看>>
备忘:java中的递归
查看>>
DIV/CSS:一个贴在左上角的标签
查看>>
Solr及Spring-Data-Solr入门学习
查看>>
Vue组件
查看>>
python_time模块
查看>>
python_configparser(解析ini)
查看>>
selenium学习资料
查看>>
<转>文档视图指针互获
查看>>
从mysql中 导出/导入表及数据
查看>>
HQL语句大全(转)
查看>>
几个常用的Javascript字符串处理函数 spilt(),join(),substring()和indexof()
查看>>
javascript传参字符串 与引号的嵌套调用
查看>>
swiper插件的的使用
查看>>
layui插件的使用
查看>>
JS牛客网编译环境的使用
查看>>
9、VUE面经
查看>>
关于进制转换的具体实现代码
查看>>