2016-03-25 4 views
2

В моем приложении я хочу закрыть его через 5 секунд с помощью функции Timer(). Он работает, когда я в MainActivity, но когда я перехожу к другому действию, тогда приложение не close.Now, как запустить эту функцию Timer() в фоновом режиме, если я переключу активность. Что делать в этом случае?Функция таймера() не работает при переходе к другому действию

Timer timer = new Timer(); 
    timer.schedule(new TimerTask() { 

     public void run() { 

      finish(); 

     } 

    }, 5000); // Application will be closed after 5 seconds 
+2

Возможный дубликат [сохранить активность происходит в фоновом режиме при переходе на другой вид деятельности?] (Http://stackoverflow.com/questions/5608833/keep-activity-going-in-background-when-switched-to -another-activity) –

+0

Да, вы правы, но нет подходящего ответа там, как это сделать ... –

+0

Когда вы переключаетесь на другую активность, память, занятая этим действием, освобождается, а объект 'Timer' тоже потеряно. Вот почему он не работает. Вы можете сделать это, используя контекст приложения. Напишите функцию в своем приложении, которая сама закрывается, и назовите ее из Activity –

ответ

3

Вы достигаете этого с помощью широковещательного приемника. в вашей деятельности, которую вы хотите завершить, вам необходимо создать широковещательный приемник.

public class TestActivity extends Activity { 

public static String intent_filter_finish = "com.test.finish"; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_test); 

      registerReceiver(finishReceiver, 
       new IntentFilter(intent_filter_finish)); 

    } 

    @Override 
    protected void onDestroy() { 
     unregisterReceiver(finishReceiver); 
     super.onDestroy(); 
    } 


    BroadcastReceiver finishReceiver = new BroadcastReceiver() { 
     @Override 
     public void onReceive(Context context, Intent intent) { 

      finish(); 

     } 
    }; 

} 

Теперь в вашем втором действии вам необходимо отправить трансляцию через 5 секунд, например,

public class SecondActivity extends Activity { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(R.layout.activity_second); 

     new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      sendBroadcast(new Intent(TestActivity.intent_filter_finish)); 

     } 
    }, 5000); 

    } 

} 

или другой возможный способ непосредственно использовать postDelayed() метод в тестовой деятельности, например,

new Handler().postDelayed(new Runnable() { 

     @Override 
     public void run() { 
      finish(); 

     } 
    }, 5000); 
+0

#Bhavesh Rangani .. Код не является ошибкой в ​​TestActivity, но в SecondActivity он дает ошибку в строке ... new Handler(). PostDelayed (new Runnable() { @Override public void run() { sendBroadcast (новое намерение (TestActivity.intent_filter_finish)); } }, 5000); } В нем говорится, что «обработчик» является абстрактным; не может быть установлен –

+0

в какой строке.? –

+0

Красная линия чуть ниже нового обработчика() встречается –

Смежные вопросы