我正在使用ASyncTask
在我的应用程序中执行简单的动画。但它只适用于Android 5.0+,低于它只是崩溃,并说我从错误的线程编辑UI。这里是我的代码:Android ASyncTask在Android 4及以下崩溃
private class AlphaCorrect extends AsyncTask<Integer, Integer, Integer> {
float alpha;
@Override
protected Integer doInBackground(Integer[] params) {
Log.i("back","running");
for (float i = 0.0f; i < 0.9; i += 0.02) {
alpha = i;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
Update();
}
try {
Thread.sleep(100);
} catch (InterruptedException e) {
e.printStackTrace();
}
for (float i = 0.8f; i > -0.1f; i -= 0.02) {
alpha = i;
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
Update();
}
return null;
}
@Override
protected void onPreExecute() {
Log.i("run", "RUN");
canClick = false;
}
@Override
protected void onPostExecute(Integer result) {
canClick = true;
}
protected void Update() {
correct.setAlpha(alpha);
}
}
我试过Runnable
,Thread
和其他一些东西了。有任何想法吗?
logcat好吗?显示确切的错误信息。 –
我想知道它在Android 5.0+上的工作原理。您确实不允许使用除main之外的任何线程对UI执行任何操作。每当你需要更新UI时,只需在*主线程*上发布一个Runnable(如果系统没有为你提供回调)。 – frangulyan