I have created some thread which print a interval each second.
When I close application Thread terminate, and I can't handle message.
public class MyJobService extends JobService {
@Override
public boolean onStartJob(JobParameters job) {
new Thread(new MyJobService.MyRunnable(1, "started job", getApplicationContext())).start();
return true;
}
@Override
public boolean onStopJob(JobParameters job) {
return false;
}
class MyRunnable implements Runnable {
private final int mStartId;
private final String mName;
private final Context mContext;
private final Handler mHandler;
MyRunnable(int startId, String name, Context context) {
mStartId = startId;
mName = name;
mContext = context;
mHandler = new Handler(Looper.getMainLooper()){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
Toast.makeText(mContext, "Pased time is " + msg.what, Toast.LENGTH_SHORT).show();
}
};
}
@Override
public void run() {
int index = 0;
while (true){
print("Service/" + mName + " " + mStartId + " looped -> " + index + " Context " + mContext);
index++;
try {
Thread.sleep(mStartId * 1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
if (index == 10 || index == 15){
Message message = mHandler.obtainMessage(index);
mHandler.sendMessage(message);
}
if (mStartId == 2 && index == 10)
stopSelf(mStartId);
}
}
}
private void print(String text){
Log.d(getClass().getSimpleName(), text);
}
}
Activity class
public class MainActivity extends AppCompatActivity implements View.OnClickListener{
public boolean isConnected;
private ServiceConnection mConnection;
private FirebaseJobDispatcher mDispatcher;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.job_start).setOnClickListener(this);
findViewById(R.id.job_stop).setOnClickListener(this);
mDispatcher = new FirebaseJobDispatcher(new GooglePlayDriver(getApplicationContext()));
}
@Override
public void onClick(View v) {
String TagJob = "my-unique-tag";
int id = v.getId();
switch (id){
case R.id.job_start:
Job myJob = mDispatcher.newJobBuilder()
// the JobService that will be called
.setService(MyJobService.class)
// uniquely identifies the job
.setTag(TagJob)
// one-off job
.setRecurring(false)
// don't persist past a device reboot
.setLifetime(Lifetime.FOREVER)
// start between and 15 seconds from now
.setTrigger(Trigger.executionWindow(1, 15))
// don't overwrite an existing job with the same tag
.setReplaceCurrent(false)
// retry with exponential backoff
.setRetryStrategy(RetryStrategy.DEFAULT_EXPONENTIAL)
// constraints that need to be satisfied for the job to run
.setConstraints(Constraint.ON_ANY_NETWORK)
.build();
mDispatcher.mustSchedule(myJob);
break;
case R.id.job_stop:
mDispatcher.cancel(TagJob);
break;
}
}
Apart of this dispatcher can not cancel a job. mDispatcher.cancel(TagJob);
I have created some thread which print a interval each second. When I close application Thread terminate, and I can't handle message.
Activity class
Apart of this dispatcher can not cancel a job.
mDispatcher.cancel(TagJob);