Android开发debug时防止后台进程因超时被杀掉

本文介绍了一种在Android开发中避免因ANR而导致进程被杀的方法。通过在开发者选项中开启“显示全部ANR”,可以使得后台进程在调试时发生ANR时不会立即被系统终止,从而有助于开发者定位和解决问题。

本人之前一直在做Android/Linux OS的底层开发工作。

近来转行至互联网行业,写Android app层Service时,断点调试时经常发现后台进程发生ANR时会被AMS无情杀掉,导致思维断行。

后来寻找到一个解决方案:

到“设置” -> "开发者选项" -> 选中最下边的“显示全部ANR”

这样子即使后台进程(比如只有Service和Receiver的进程)发生ANR(调试时是因为目标进程被attach住,不算运行时程序内部带来的ANR)也可以在界面选择“等待”以要求AMS大爷手下留情。不要kill掉它。

给定的参考引用中未提及在 Android Studio 进行 debug 程序超时不闪退的解决方案相关内容,不过一般可以从以下几个方面尝试解决: ### 调整调试超时设置 在 Android Studio 中,可以尝试调整调试的超时间。可以通过修改 `gradle.properties` 文件,添加或修改以下属性: ```plaintext android.debug.obsoleteApi=true android.injected.testOnly=false ``` 同,在 Android Studio 的设置中,找到 `Build, Execution, Deployment` -> `Debugger`,增加 `Debugger timeout` 和 `Wait for debugger timeout` 的间,避免因调试过程中程序响应慢而导致超时闪退。 ### 检查代码逻辑 - 检查是否存在死循环、长间阻塞的代码。如果代码中有耗操作,例如在主线程进行大量的计算、网络请求等,可能会导致超时闪退。可以将这些耗操作放在子线程中执行,使用 `AsyncTask`、`HandlerThread` 或 `RxJava` 等工具。 以下是使用 `AsyncTask` 执行耗操作的示例: ```java import android.os.AsyncTask; import android.os.Bundle; import android.widget.TextView; import androidx.appcompat.app.AppCompatActivity; public class MainActivity extends AppCompatActivity { private TextView textView; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); textView = findViewById(R.id.textView); new LongTask().execute(); } private class LongTask extends AsyncTask<Void, Void, String> { @Override protected String doInBackground(Void... voids) { // 模拟耗操作 try { Thread.sleep(5000); } catch (InterruptedException e) { e.printStackTrace(); } return "Task completed"; } @Override protected void onPostExecute(String result) { textView.setText(result); } } } ``` ### 检查设备和模拟器 - 确保设备或模拟器的性能足够,内存充足。如果设备或模拟器性能较差,可能会导致调试过程中程序响应慢而超时闪退。可以尝试清理设备或模拟器的缓存,关闭其他不必要的应用程序。 ### 检查依赖库 某些第三方依赖库可能存在兼容性问题,导致调试超时闪退。可以尝试更新或移除这些依赖库,或者查看这些库的官方文档,了解是否有相关的已知问题和解决方案。
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值