在android开发中不可避免的要申请一些权限,用户允许之后就可以酣畅淋漓使用我们的app了
可是如果用户在使用app期间,将app至于后台去应用设置页面禁止了app的权限,那么这个时候将app恢复到前台会发生什么呢?

先说结论吧:

1 app进程被杀死并重启一个新的进程

既然是重启一个新的进程,是不是重新打开下面属性指定的Activity?

 <intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter>

2 会按照之前存在的activity栈信息创建新进程,之前有多少个activity现在还有多少个,之前的顺序是什么现在还是什么,之前停留在哪个activity现在还会停留在哪个activity,但是每个activity之前的方法都无效了,都需要重新走一遍onCreate(Bundle savedInstanceState)方法

口说无凭,我们测试一下

清单文件中申请地理位置权限

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"package="com.justtest">
<uses-permission-sdk-23 android:name="android.permission.ACCESS_FINE_LOCATION"/><applicationandroid:allowBackup="true"android:icon="@mipmap/ic_launcher"android:label="@string/app_name"android:name=".TestApplication"android:roundIcon="@mipmap/ic_launcher_round"android:supportsRtl="true"android:theme="@style/AppTheme"><activity android:name=".activitys.Main2Activity"></activity><activity android:name=".activitys.MainActivity"><intent-filter><action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" /></intent-filter></activity></application></manifest>
public class TestApplication extends Application {public static String T="deafult";@Overridepublic void onCreate() {super.onCreate();Log.i("TAG", "LCJ: TestApplication pid= " + android.os.Process.myPid());}
}
public class MainActivity extends AppCompatActivity {private Button btn;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);TestApplication.T = "你好";initView();Log.i("TAG", "LCJ: MainActivity savedInstanceState== "+savedInstanceState);Log.i("TAG", "LCJ: MainActivity onCreate");}private void initView() {btn = findViewById(R.id.btn);btn.setText(TestApplication.T);btn.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {startActivity(new Intent(MainActivity.this,Main2Activity.class));}});}
}
public class Main2Activity extends AppCompatActivity {private Button btnFinish;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main2);Log.i("TAG", "LCJ: MainActivity2 onCreate");Log.i("TAG", "LCJ: MainActivity2 TestApplication.T "+TestApplication.T);Log.i("TAG", "LCJ: MainActivity2 savedInstanceState== "+savedInstanceState);initView();}private void initView() {btnFinish = findViewById(R.id.btn_finish);btnFinish.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View v) {finish();}});}
}

这个时候我们启动app log日志如下

2019-05-15 16:36:02.588 7726-7726/? I/TAG: LCJ: TestApplication pid= 7726
2019-05-15 16:36:02.896 7726-7726/? I/TAG: LCJ: MainActivity savedInstanceState== null
2019-05-15 16:36:02.896 7726-7726/? I/TAG: LCJ: MainActivity onCreate
2019-05-15 16:36:05.977 7726-7726/com.justtest I/TAG: LCJ: MainActivity2 onCreate
2019-05-15 16:36:05.977 7726-7726/com.justtest I/TAG: LCJ: MainActivity2 TestApplication.T 你好
2019-05-15 16:36:05.977 7726-7726/com.justtest I/TAG: LCJ: MainActivity2 savedInstanceState== null

我们可以看到这个进程id为7726,然后MainActivity调用onCreate,点击按钮之后跳转到MainActivity2也是调用了onCreate方法,注意这里的savedInstanceState都是null
到这里都很正常,和我们预期的一模一样

好,现在我们将应用至于后台去进程中打开地理位置权限

日志没有任何变化——手动允许相应权限不会影响在后台的应用

我们现在禁止地理位置权限,发现进程被杀死但是还没有创建新的进程

这个时候将app恢复到前台


我们发现进程id变成了8182,这是一个新建的进程,我们的活动页面也停留在MainActivity2中并且调用了onCreate方法,注意此时savedInstanceState不为空,这个时候这个savedInstanceState是有值得,说明这是android系统帮忙恢复的

这个时候关闭MainActivity2,看看会发生什么?


没错,还是按照之前的栈顺序回到了MainActivity,并且调用了onCreate方法,注意此时的savedInstanceState也不为空

至此好像真相大白了,可是我们这里需要注意什么呢?

旧的进程被杀标志着旧进程里面的变量数据被清空了
新的进程是没有这些数据的,当你还天真的以为自己可以获取到之前设置的token啊,全局变量啊,你会发现都没了

手动收回应用权限对android app的影响相关推荐

  1. android 6.0权限库,Android 6.0动态权限适配

    前言 最近项目发现比较多的问题是关于Android 6.0的问题,APP安装之后,在Android 6.0之后的系统,点击直接奔溃打不开,这是为什么昵?这就是Android 6.0以上的系统引入运行时 ...

  2. android 加网络权限管理,Android添加用户组及自定义App权限的方法

    Android:4.4.4 一.应用场景 在Android设备上,现在我们外接了一个USB转串口的设备,设备节点是/dev/ttyUSB0: # ls -l /dev/ttyUSB0 crw-rw-- ...

  3. Android 11.0 12.0系统默认授予读写权限给第三方app

    1.概述 在6.0以前读写权限是默认授予的,app不需要申请权限 在10.0之前需要android.permission.WRITE_EXTERNAL_STORAGE和android.permissi ...

  4. 没有授权,Android App 也能获取你的权限?!

    Play Trick or Treat! 不给权限就捣乱! 整理 | 屠敏 出品 | CSDN(ID:CSDNnews) 一直以来,无论是 Android 还是 iOS 用户都有一种困扰,即每次下载并 ...

  5. android 程序a启动程序b的权限,android app微信分享

    android app微信分享 积分: 22 智慧币 积分: 2 智慧币 [0.67元 ] 包含内容: 源码,全套工具 详情描述 如遇视频不清晰,请最大化观看演示 以下仅列出部分功能,全部功能请至官网 ...

  6. android app权限_如何限制Android App权限

    android app权限 Android forces you to agree to every permission an app wants, assuming you want to use ...

  7. android编程root启动指定app,取之有道——巧用Root权限 启动其他APP中的Activity

    取之有道--巧用Root权限 启动其他APP中的Activity 2019年01月29日 | 萬仟网移动技术 | 我要评论 这次博主来分享一个很巧妙的办法来启动其他APP中Activity的方法. 首 ...

  8. Android App安全监测隐私权限工具及自测

    1.参考文章[Android App]安全监测隐私权限工具及自测 图文详解_飞雪金灵的博客-CSDN博客_app权限检测工具 2.修改上文使用到的命令,即不在控制台输出日志,将日志输出到文件中 pyt ...

  9. Android App签名和权限

    签名简介 在Android系统中,所有安装到系统的应用程序都必有一个Android数字证书,此数字证书用于标识应用程序的作者和在应用程序之间建立信任关系,如果一个permission的protecti ...

最新文章

  1. 电路邱关源第五版pdf_硬件狗教你学电路【二】:电路分析方法
  2. JavaScript 进阶(二)变量作用域
  3. java注解 interface_java @FunctionalInterface注解详解
  4. js visibility和display区别(附代码实例)
  5. Android 自定义焦点框,Android给自定义按键添加广播和通过广播给当前焦点输入框赋值...
  6. 有如下MySQL表_有一个名为app的MySQL数据库表,其建表语句如下: CR
  7. python前后两个下划线_Python中一个下划线_和两个下划线__的区别
  8. gitlab php自动化测试,自动化发布-GitLab WEB Hooks 配置
  9. 计算机彻底删除删除后如何恢复,如何完全恢复从计算机删除的文件?
  10. 新鲜角度看问题:从Python角度解析Selenium原理
  11. 品优影视建站系统1.3.6.5开源绿色版
  12. 实战SATA硬盘安装64位XP(转)
  13. 蓦然回首,灯火阑珊——自考总结
  14. 文档翻译——免费版(word格式、pdf格式)
  15. 左手系与右手系 图片理解
  16. 2021年全球手机市场,三星和华为都输了,其他手机企业赢了
  17. 程序员的外功和内功的修炼
  18. Win 10系统安装3ds max 2014
  19. 非平稳信号的频谱分析方法---(短时傅立叶变换)
  20. 窃密软件访问的文件和注册表

热门文章

  1. PowerPoint2010使用技巧之一:新功能之初体验
  2. WPF图片切换问题(美女时钟)
  3. CSS 实现日历样式
  4. IDEA14--SVN安装的使用心得
  5. oracle commandtimeout,连接池和 Timeout expired异常解决方法
  6. iPhone 5s(A1528) ios9.3.3 成功使用联通4G
  7. 手把手教你“开发GTA6”
  8. Hacker News的排名算法
  9. P6166 [IOI2012]scrivener
  10. 怎样压缩图片大小?好用的图片压缩技巧分享