我试图在android中添加Sheduled Task的功能,以便在我想知道每当用户丢失他的互联网连接之后做一些事情,然后我想做一个警告对话框。所以我使用Sheduled Task Execution来做这件事,但每当我在Runnable中运行我的运行代码时,Task都无效。
重要的是我在服务类
中这样做代码
package com.example.sid.marwadishaadi.LoginHistory;
import android.app.Service;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
import android.content.SharedPreferences;
import android.net.ConnectivityManager;
import android.net.NetworkInfo;
import android.os.AsyncTask;
import android.os.IBinder;
import android.provider.Settings;
import android.support.v7.app.AlertDialog;
import android.util.Log;
import android.widget.Toast;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
import static com.bumptech.glide.gifdecoder.GifHeaderParser.TAG;
public class OnClearFromRecentService extends Service {
@Override
public IBinder onBind(Intent intent) {
return null;
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
Log.e("ClearFromRecentService-", "-----------------------------------------Service Started");
SharedPreferences sharedPreferences=getSharedPreferences("userinfo",MODE_PRIVATE);
SharedPreferences.Editor edtr=sharedPreferences.edit();
String id=sharedPreferences.getString("customer_id","");
Log.e(TAG, "onStartCommand: .........................."+id);
if(isOnline()) {
Toast.makeText(this, "You are online", Toast.LENGTH_SHORT).show();
}
ScheduledExecutorService scheduleTaskExecutor = Executors.newScheduledThreadPool(5);
scheduleTaskExecutor.scheduleAtFixedRate(new Runnable() {
public void run() {
Log.i(TAG, "run: ----I'm running after 15 seconds");
if(isOnline()) {
//Dummy TODO, you can do something if you want,
Toast.makeText(OnClearFromRecentService.this, "You are not online", Toast.LENGTH_SHORT).show();
}
else{
Log.i(TAG, "run: --- exited from here or not :::: yes ");
AlertDialog.Builder network =new AlertDialog.Builder(OnClearFromRecentService.this);
network.setTitle("No Internet");
network.setMessage("Please check your internet connection or go to the internet option by clicking #settings");
network.setPositiveButton("Settings", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
getApplicationContext().startActivity(new Intent(Settings.ACTION_WIRELESS_SETTINGS));
}
});
network.setNegativeButton("Exit", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialogInterface, int i) {
Intent intent = new Intent(Intent.ACTION_MAIN);
intent.addCategory(Intent.CATEGORY_HOME);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
startActivity(intent);
}
});
network.setCancelable(false);
AlertDialog alertDialog = network.create();
alertDialog.show();
}
}
}, 0, 15, TimeUnit.SECONDS);
return START_NOT_STICKY;
}
public boolean isOnline() {
ConnectivityManager conMgr = (ConnectivityManager) getApplicationContext().getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo netInfo = conMgr.getActiveNetworkInfo();
if(netInfo == null || !netInfo.isConnected() || !netInfo.isAvailable()){
Toast.makeText(getApplicationContext(), "No Internet connection!", Toast.LENGTH_LONG).show();
return false;
}
return true;
}
@Override
public void onDestroy() {
super.onDestroy();
Log.e("ClearFromRecentService-", "-----------------------------------Service Destroyed");
}
@Override
public void onTaskRemoved(Intent rootIntent) {
Log.e("Clearvi--------------", "---------------------------------END");
//Code here
stopSelf();
}
}
当我在完成任务和打印单行时没有做任何事情然后工作正常
log.e(“”,“我在15秒后跑步”) - >>在日志中打印行
但是当我把我的代码放到那时它不起作用,就像代码没有运行一样。
任何人都可以提出建议吗,对菜鸟来说真的很有帮助。
答案 0 :(得分:2)
将run
方法换入try-catch
块。
只是一个猜测:抛出异常。如果遇到异常,ScheduledExecutorService
会静默停止。
run方法的代码应始终由try-catch
包围,以处理和吸收任何抛出的异常。
如果您尝试在尝试捕获之前创建一个Looper并将其打开,那么它将正常工作,因为您无法处理来自工作线程的UI线程。