ANR通常是因为主UI线程在进行一些长时间的操作,从而导致应用程序停止响应用户的操作。要解决这个问题,可以通过将长时间的操作移到工作线程或异步任务中来实现。以下是使用异步任务来避免ANR的示例代码:
public class MyActivity extends Activity {
private TextView mTextView;
private MyTask mTask;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
mTextView = findViewById(R.id.text);
mTask = new MyTask();
mTask.execute();
}
private class MyTask extends AsyncTask {
@Override
protected String doInBackground(Void... params) {
// 这里写你的长时间操作
return "完成";
}
@Override
protected void onPostExecute(String result) {
mTextView.setText(result);
}
}
}
在这个示例中,我们将长时间的操作放在MyTask类中的doInBackground方法中,并将结果传递给onPostExecute方法,在其中更新UI。这样做可以避免在主线程上进行长时间操作,并且保持应用程序的响应性。