サービスを開始するAndroidアプリケーションを開発しています。サービスは一定の時間間隔ごとにコードを実行し、アクティビティの結果を終了します。アクティビティはユーザーに結果を表示する必要があります。
まずはスレッドで試してみました。一定の間隔の後にサービスを実行するには、スレッドを作成します-コードを実行し、結果を取得します-この結果をアクティビティに送信して表示します-一定の時間間隔でスレッドをスリープ状態にします。しかし、期待どおりに機能していません。コードはスレッドによって実行されます。スレッドはスリープ状態になり、スリープ時間間隔の後、最後に結果がアクティビティに送信されます。要件は、スレッドコードの実行によって結果が取得された直後に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;
}
}
}
}