Здравствуйте.Есть класс Main_2_Activity
в котором переопределен onDestroy
, при срабатывании метода onDestroy запускаю сервис класс (startService(new Intent(Main_2_Activity.this,СервисКласс.class))
).В сервис классе есть AsyncTask<Void,Void,Void>
внутри которого бесконечный цикл а в цикле естьTimeUnit.SECONDS.sleep(10)
..Кроме этих классов есть еще один активити MainActivity
который показывает превью(картинку) приложения при запуске приложения и через 3 секунды автоматом переходит на Main_2_Activity
.Переход в Main_2_Activity
происходит тоже в отдельном потоке (AsyncTask)
.И если приложение закрыть (запуск Service) и открыть то переход из MainActivity
к Main_2_Activity
не происходит.Приложение зависает показывая превью.Но если убираю startService из onDestroy то все нормально работает.
В чем может быть проблема?
Код:
MainActivity.class
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); setContentView(R.layout.activity_main); new MyAsync2().execute(); } class MyAsync2 extends AsyncTask<Void,Void,Void> { @Override protected Void doInBackground(Void... voids) { for(int i =0;i<3;i++){ try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } } return null; } @Override protected void onPostExecute(Void aVoid) { Intent intent = new Intent(getApplicationContext(),Main_2_Activity.class); intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TASK); startActivity(intent); finish(); } }
Main_2_Activity.class
@Override protected void onDestroy() { super.onDestroy(); //тут еще немного кода startService(new Intent(Main_2_Activity.this,Timer_Alert.class)); Toast.makeText(this,"Сервис запущен!", Toast.LENGTH_SHORT).show(); }
Сервис класс
public class Timer_Alert extends Service { @Nullable @Override public IBinder onBind(Intent intent) { return null; } @Override public int onStartCommand(Intent intent, int flags, int startId) { new MyAsync().execute(); return super.onStartCommand(intent, flags, startId); } @Override public void onTaskRemoved(Intent rootIntent) { // TODO Auto-generated method stub Intent restartService = new Intent(getApplicationContext(), this.getClass()); restartService.setPackage(getPackageName()); PendingIntent restartServicePI = PendingIntent.getService( getApplicationContext(), 1, restartService, PendingIntent.FLAG_ONE_SHOT); AlarmManager alarmService = (AlarmManager)getApplicationContext().getSystemService(Context.ALARM_SERVICE); alarmService.set(AlarmManager.ELAPSED_REALTIME, SystemClock.elapsedRealtime() +1000, restartServicePI); } public class MyAsync extends AsyncTask<Void,Void,Void> { @Override protected void onPreExecute() { try { BufferedReader bf = new BufferedReader(new InputStreamReader(openFileInput("path.txt"),"UTF-8")); path = bf.readLine(); } catch (FileNotFoundException e) { } catch (UnsupportedEncodingException e) { } catch (IOException e) { } if(json==null){ try { InputStream is = getAssets().open(path+".json"); int size = is.available(); byte[] buffer = new byte[size]; is.read(buffer); is.close(); json = new String(buffer, "UTF-8"); Log.e("input_onPreExecute : ",json.length()+""); } catch (IOException ex) { } }try { year = new JSONObject(json); months = year.getJSONObject("month"+mmon); dayJs = months.getJSONObject("day_"+dday); Log.e("JSON_onPreExecute : ",""+dayJs.toString()); } catch (JSONException e) { } hrs = hh+":"+min; try { strJson = dayJs.getString("блаблабла"); } catch (JSONException e) { } //тут еще пара if-ов как сверху. } @Override protected Void doInBackground(Void... voids) { String nName=null; try { boolean bool = true; while(bool){ date = new Date(); try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { } //Тут немного кода... strJson = dayJs.getString("блаблабла"); if(hrs.equals(strJson)){ nName = "блаблабла"; publishProgress(); TimeUnit.MINUTES.sleep(1); } } } catch (JSONException e) { } catch (InterruptedException e) { } return null; } @Override protected void onProgressUpdate(Void... values) { //Тут код для показа Notification. Toast.makeText(getApplicationContext(),strJson,Toast.LENGTH_LONG).show(); }