2010-08-12 2 views
0

У меня есть кнопка START и STOP на главном экране приложения. есть некоторые GUI и потоки, которые создаются при нажатии кнопки START. Когда я нажимаю на остановку, я хочу, чтобы все было остановлено, и действие должно вернуться к исходному состоянию. Для состояния, которое точно так же, как при запуске (когда мы нажали на значок приложения на мобильном телефоне). Можно ли это сделать? Я попытался с финишем(), это убило приложение и вышло. Я не хочу выходить с главного экрана. Скорее, при нажатии кнопки STOP я хочу, чтобы приложение возвращалось к исходному или рожденному состоянию. Благодарю.остановить или обновить активность приложения

ответ

1

Как вы управляете своими темами? Являются ли они ванильными нитями или подклассами AsyncTask?

Если это экземпляры AsyncTask объекта, вы можете использовать метод cancel(), чтобы отменить его, а затем внутри ваш метод doInBackground(), вы можете проверить метод isCancelled(), чтобы увидеть, если он действительно был отменен, а затем выйти из грациозно.

код Псевдо ниже:

private YourTask taskRef; 

public void btnStartHandler() { 
    taskRef = new YourTask(); 
    taskRef.execute(); 
} 

public void btnStopHandler() { 
    taskRef.cancel(); 
} 

, а затем, в вашем AsyncTask:

public Void doInBackground(Void... arg0) { 
    // Background loop start 
    if (this.isCancelled()) { 
     return; 
    } 
    // Background loop continue... 
} 

Если вы используете темы, вы можете прервать их и поймать исключение и обработать его там. Кроме того, вы можете создать метод, который вы вызываете от onCreate() под названием initApp() или что-то, что инициализирует все. Вы также можете использовать этот initApp() с помощью обработчика щелчка кнопки STOP, чтобы вернуть значения к значениям по умолчанию для запуска.

+0

это было не то, что я искал, нет такого initapp() либо. –

+0

Если вы обратите внимание, я предложил вам создать этот метод и вызвать его из 'onCreate()'. Немного больше информации о том, что вы делаете, несомненно, будет полезно для получения ответа, который вы ищете. – TJF

+0

+1 Чтобы компенсировать, кто бы ни подавил этот информативный ответ. – hpique

0

Вы можете перезапустить мероприятие с помощью finish(), а затем позвонить по телефону startActivity(getIntent());. Это эффективно перезапустит вашу деятельность и поместит ее в состояние по умолчанию, независимо от того, как она была запущена.

Перед выполнением этого обязательно отмените все потоки или AsyncTasks в соответствии с предложением TJF (вы можете и должны делать это в перегрузке onDestroy).

Для получения дополнительной информации о перезапуске деятельности и дискуссии о преимуществах и недостатках см этого вопрос: Reload activity in Android

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