我遇到一个 ANR(应用程序无响应)问题。我正在尝试使用AsyncTask将任务分为多个线程,但是似乎比以前更糟。
我做错了,但我不知道问题出在哪里。
如您所见,主线程需要600万毫秒,这我认为不好。
为了提高性能,我在各种活动的onCreate()
方法中做了这些事情:
AsyncTask.execute(new Runnable() {
@Override
public void run() {
//TODO your background code
if(sPreferenceManager.getBoolean(Constants.SharedPreferences.UPDATE_REQUIRED))
{
log(Log.DEBUG,"mediaplayeractivity","UPDATE_REQUIRED");
mViewModel.getmInteractor().updateDatabaseAfterLogin();
}
}
});
AsyncTask.execute(new Runnable() {
@Override
public void run() {
//TODO your background code
initServices(savedInstanceState);
}
});
AsyncTask.execute(new Runnable() {
@Override
public void run() {
Fabric.with(GomusApplication.this,new Crashlytics());
//TODO your background code
AndroidThreeTen.init(GomusApplication.this);
initPreferences();
sInstance = GomusApplication.this;
initRealm();
appComponent = DaggerAppComponent.builder()
.appModule(new
AppModule(GomusApplication.this)).build();
appComponent.inject(GomusApplication.this);
}
});
我将任务分为 AsyncTasks 。但是,这会使性能变差!
更新: 我已经像这样更改了我的AsyncTasks,但仍然看不到任何奇怪的增强功能:
new AsyncTask<Void,Void,Void>() {
@Override
protected Void doInBackground(Void... voids) {
if(sPreferenceManager.getBoolean(Constants.SharedPreferences.UPDATE_REQUIRED))
{
log(Log.DEBUG,"UPDATE_REQUIRED");
mViewModel.getmInteractor().updateDatabaseAfterLogin();
}
return null;
}
}.executeonExecutor(AsyncTask.THREAD_POOL_EXECUTOR,null);
我还对约束布局进行了一些布局更改,例如缺少某些字段,并添加了它们。我删除了一些大图像以提高性能。
但是,我所做的使性能变差。运行主线程花了3M毫秒,但现在是6M毫秒。
很抱歉,到目前为止,我从未尝试提高性能,所以我没有足够的知识。但是我进行了一些研究,有人说它使用AsyncTask。
任何帮助将不胜感激。
谢谢!