Dan*_*iel 4 multithreading android
我在 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();
}
Run Code Online (Sandbox Code Playgroud)
从你的描述来看,bindService
在UI线程内调用似乎不是ANR的根本原因。相反,您应该在bindService
不生成用户线程的情况下调用。一个主要原因是,这会导致内存泄漏。
当配置发生变化时,只要线程还活着,它就不会给Activity
执行垃圾收集的机会。这是因为您的用户线程仍然持有对Activity
.
ANR 根本原因应该来自Recognizer
或mConnection
。如果您可以发布它们的实现细节,这可以帮助我们为您提供帮助。
问自己以下问题
onServiceConnected
?onCreate
?