Я написал небольшое приложение, которое меняет фон приложения каждые 3 секунды. Для этого я использовал объект Handler и Runnable. Он работает нормально. Вот мой код:Будет ли handler.post (новый Runnable()); создать новую тему в Android?
public class MainActivity extends Activity {
private RelativeLayout backgroundLayout;
private int count;
private Handler hand = new Handler();
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Button clickMe = (Button) findViewById(R.id.btn);
backgroundLayout = (RelativeLayout) findViewById(R.id.background);
clickMe.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
count = 0;
hand.postDelayed(changeBGThread, 3000);
}
});
}
private Runnable changeBGThread = new Runnable() {
@Override
public void run() {
if(count == 3){
count = 0;
}
switch (count) {
case 0:
backgroundLayout.setBackgroundColor(getResources().getColor(android.R.color.black));
count++;
break;
case 1:
backgroundLayout.setBackgroundColor(Color.RED);
count++;
break;
case 2:
backgroundLayout.setBackgroundColor(Color.BLUE);
count++;
break;
default:
break;
}
hand.postDelayed(changeBGThread, 3000);
}
};
}
Здесь я меняю фон UI в не-UI потоке, т.е. backgroundLayout.setBackgroundColor(Color.RED);
внутри бег(); как он работает?
Спасибо, Как я прочитал здесь HTTP: //developer.android.com/reference/android/os/Looper.html Темы по умолчанию не имеют связанного с ними цикла сообщений. Мы должны создать его, вызвав команду prepare(). Тогда основной поток имеет Looper по умолчанию, bcoz я не создал ни одного петлителя в своем приложении. – Pradeep
Да, основной поток ui имеет связанный с ним петлитель, и вы можете получить его с помощью Looper.getMainLooper() (что полезно, если вы хотите проверить, какой обработчик связан с обработчиком) – FunkTheMonk