2016-11-09 39 views
1

このコードを実行して、自分のデータベースからユーザのステータスを取得しようとしました。このプロセスにはJSONが含まれているので、Runnableを実装して新しいクラスをバックグラウンドサービスとして動作させます。私はクラス拡張サービスを作成しました。そのサービスで私はスレッドを呼び出します。私はハンドラを使い、スレッドを繰り返すためにpostDelayedを使います。私は私のコードはここにBackgroundThread.classを繰り返すためのものであると信じていpostdelayedハンドラは実行可能ファイルを再実行しません

public int onStartCommand(Intent intent, int flags, final int startId) { 

Toast.makeText(this,"SESSION START",Toast.LENGTH_SHORT).show(); 
handler.postDelayed(new Runnable() { 
    @Override 
    public void run() { 
     new Thread(new BackgroundThread(startId)).start(); 
    } 
},1000); 

return START_STICKY; 
} 

public class BackgroundThread implements Runnable { 
int service_id; 
int mark=-1; 

public BackgroundThread(int service_id) { 
    this.service_id=service_id; 
} 

@Override 
public void run() { 
    JSONData jsonData = new JSONData(); 
    if (jsonData.getJSONstring() == 1 && mark != 1) { 
     Log.e("STATUS", "" + jsonData.getJSONstring()); 
     mark = 1; 
    } else if (jsonData.getJSONstring() == 0 && mark != 0) { 
     Log.e("STATUS", "" + jsonData.getJSONstring()); 
     mark = 0; 
    } 
    Log.d("RUNNING","RUNNING"); 
} 
} 

Runnableを実装します。しかし

11-09 23:38:56.683 6483-6526/com.example.asus.intentservice I/OpenGLRenderer﹕ Initialized EGL, version 1.4 
11-09 23:38:58.743 6483-6526/com.example.asus.intentservice V/RenderScript﹕ 0xa34ed000 Launching thread(s), CPUs 4 
11-09 23:38:59.642 6483-6745/com.example.asus.intentservice W/System﹕ ClassLoader referenced unknown path: /system/framework/tcmclient.jar 
11-09 23:38:59.968 6483-6745/com.example.asus.intentservice E/STATUS﹕ 0 
11-09 23:38:59.968 6483-6745/com.example.asus.intentservice D/RUNNING﹕ RUNNING 

は私のコードに問題がされると、スレッドはどうなりますか?あるいは私の目的を達成するための選択肢があるかもしれません。しかし、誰かが私のコードを修正する手助けをすることができれば私は好む。非常に多く、それが

+0

である私のよう を失った他の人が私のコードに何か問題があります*はい、お役に立てば幸いです - 一度だけ投稿をpostDelayed。あなたは何を達成しようとしていますか? – Blackbelt

+0

ユーザのステータスを繰り返し確認するためにスレッドが必要です。私はインターネットを検索しており、ほとんどのウェブはそれを達成するためにタイマーやハンドラを使うことを提案しています。それを理解するのが間違っていますか?私はアンドロイドスタジオの新人です。ありがとう@Blackbelt –

+0

postDelayedは、1つの実行可能ファイルを一度投稿します。複数回ポストしたい場合は、実行可能postDelayed自体を再度持っています。これをスレッドと組み合わせることは、最小限のことを言うには匂いがするかもしれませんが、おそらく実行可能ファイルを持たないほうがいいでしょうし、スレッドを無限にループする必要があります。 –

答えて

0

他の人が説明されたハンドラpostDelayedについての理解を取得した後感謝し、私が代わりを探してAndroid run thread in service every X seconds からこのコードを使用してみてくださいしようとするとそれが動作します。 ? は私の質問は、*これは私の新しいコード

public int onStartCommand(Intent intent, int flags, final int startId) { 

Toast.makeText(this,"SESSION START",Toast.LENGTH_SHORT).show(); 
    ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5); 
    scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() { 
     @Override 
     public void run() { 
      new Thread(new BackgroundThread(startId)).start(); 
     } 
    },0,2, TimeUnit.SECONDS); 
return START_STICKY; 
} 
関連する問題