gpt4 book ai didi

android - 为什么 bindservice 在将其移动到工作线程后仍然会导致应用程序 ANR

转载 作者:太空宇宙 更新时间:2023-11-03 12:55:44 25 4
gpt4 key购买 nike

我在 onCreate 中有一个 bindservice 需要很长时间,我试图通过将它移动到工作线程来解决这个问题,但它仍然导致 UI 等待。我能做什么

public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);


new Thread(){
public void run(){
android.os.Process.setThreadPriority(android.os.Process.THREAD_PRIORITY_BACKGROUND);

Intent serviceIntent = new Intent(getApplicationContext(), Recognizer.class);
bindService(serviceIntent, mConnection,Context.BIND_AUTO_CREATE);
}
}.start();
}

最佳答案

根据您的描述,似乎在 UI 线程中调用 bindService 并不是 ANR 的根本原因。相反,您应该在不生成用户线程的情况下调用 bindService。一个主要原因是,这会导致内存泄漏。

当配置发生变化时,只要线程还活着,它就不会给Activity 执行垃圾收集的机会。这是因为您的用户线程仍然持有对 Activity 的引用。

ANR 根本原因应该来自RecognizermConnection。如果您可以发布它们的实现细节,这可以帮助我们为您提供帮助。

问自己以下问题

  1. 您是否在 mConnection 的 onServiceConnected 中执行任何 I/O 密集型任务?
  2. 您是否在 Recognizer 的 onCreate 中执行任何 I/O 密集型任务?
  3. ...

关于android - 为什么 bindservice 在将其移动到工作线程后仍然会导致应用程序 ANR,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20718736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com