#java #android #multithreading
#java #Android #многопоточность
Вопрос:
`//some method
Timer timer=new Timer();
//Handler handler=new Handler();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
loadLayout();
}
}, 1000, 10000000);
//end of method
public void loadLayout()
{
li = (LayoutInflater) getSystemService(LAYOUT_INFLATER_SERVICE);
wm = (WindowManager) getSystemService(WINDOW_SERVICE);
params = new WindowManager.LayoutParams(
WindowManager.LayoutParams.TYPE_SYSTEM_OVERLAY | WindowManager.LayoutParams.TYPE_SYSTEM_ALERT,
WindowManager.LayoutParams.FLAG_WATCH_OUTSIDE_TOUCH | WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL,
PixelFormat.TRANSLUCENT);
params.gravity = Gravity.RIGHT | Gravity.TOP;
myview = li.inflate(R.layout.locked_layout, null);
wm.addView(myview, params);
}`
Как вызвать метод WindowMananger.addView(ViewGroup,LayoutParams) внутри потока?
Пожалуйста, помогите мне!!!!!
Ответ №1:
Я думаю, ваша проблема в том, что вы вызываете WindowMananger.addView(ViewGroup,LayoutParams) в отдельном потоке, вы должны вызвать его в UI-thread. Этот код находится в действии, верно? Поэтому просто измените свою временную задачу:
Timer timer=new Timer();
//Handler handler=new Handler();
timer.scheduleAtFixedRate(new TimerTask()
{
public void run()
{
runOnUiThread(new Runnable() {
@Override
public void run() {
loadLayout();
}
});
}
}, 1000, 10000000);
Комментарии:
1. не могли бы вы, пожалуйста, сказать мне, как это сделать?
2. Я запускаю это в сервисе. У него нет метода runOnUiThread. Есть ли какой-нибудь метод для вызова его из сервиса?