나는 서비스를 시작할 안드로이드 응용 프로그램을 개발 중이다. 서비스는 일정한 간격마다 일정한 코드를 실행하고 그 결과를 활동에 종결시킬 것이다. 활동은 결과를 사용자에게 보여줘야한다.안드로이드 서비스에서 스레드/타이머를 사용하고 UI를 업데이트하는 방법은 무엇입니까?
먼저 스레드로 시도해 보았습니다. 고정 된 간격 후에 서비스가 실행되도록하려면 스레드를 생성합니다 - 코드를 실행하고 결과를 얻으십시오 - 표시를 위해이 결과를 활동으로 보내십시오 - 스레드를 일정 시간 동안 잠자기 상태로 만듭니다. 그러나 예상대로 작동하지 않습니다. 코드는 스레드에 의해 실행됩니다. 스레드가 절전 모드로 전환 된 후 잠자기 시간이 지난 후 결과가 활동의 끝에 보내집니다. 요구 사항은 스레드 코드 실행으로 결과를 얻은 후에 UI를 즉시 업데이트해야한다는 것입니다.
또한 Timer 및 TimerTask를 사용해 보았습니다. 그러나 위와 같은 결과를줍니다. 도와주세요.
서비스 클래스
@Override
public int onStartCommand(Intent intent, int flags, int startId)
{
td = new ThreadDemo();
td.start();
}
private class ThreadDemo extends Thread
{
@Override
public void run()
{
super.run();
String result = //code executes here and returns a result
sendMessageToUI(result); //method that will send result to Activity
ThreadDemo.sleep(5000);
}
}
private void sendMessageToUI(String strMessage)
{
Bundle b = new Bundle();
b.putString(“msg”, strMessage);
Message msg = Message.obtain(null, 13);
msg.setData(b);
}
활동 클래스
public class MyActivity extends Activity
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
}
class IncomingHandler extends Handler
{
@Override
public void handleMessage(Message msg)
{
System.out.println("in ui got a msg................");
switch (msg.what)
{
case 13:
System.out.println("setting status msg..............");
String str1 = msg.getData().getString("msg");
textview.setText(str1);
break;
}
}
}
}
처리기가 필요 없습니다. 'runOnUiThread' 사용 – Shafi