Я называю поддействие от основного вида деятельности. Это поддействие должно взять немного чисел от пользователя (я использую текстовое управление Редактированием для достижения этого), сохраните их к статической переменной в другом классе и оконечный. Я хочу, чтобы основной вид деятельности ожидал поддействия, но оба просто работают одновременно. Даже выполнение sth как этот не помогает:
Thread t = new Thread(new Runnable(){
public void run(){
Log.v("==================", "run "+new Date());
startActivityForResult(new Intent(ctx,myCustomSubactivity.class),1);
} });
Log.v("==================", "calling run "+new Date());
t.start();
try {
t.join();
} catch (InterruptedException e) {Log.v("==================", "can't join");}
Log.v("==================", "back from activity "+new Date());
Вы знаете, как вынудить основной вид деятельности ожидать? Thread.wait () метод не поддерживается в Android (программа бросает ошибку).
Я согласен с Николаем, это определенно способ для Android.
Запустите вспомогательное действие с помощью startActivityForResult , в вспомогательном действии используйте setResult , чтобы добавить код результата и намерение со всеми числами, которые вам нужны в пакете данных.
В первом действии перезапишите onActivityResult и получите числа из намерения.
Если вы используете статическую переменную, это на первый взгляд кажется проще, но это очень небезопасно, и в некоторых случаях это может не сработать. Если ваша программа отправляется в фоновый режим, ваши действия будут сохранены, но если на телефоне заканчивается память, система закроет вашу программу, и после того, как пользователь возобновит ее, все выглядит так, как будто пользователь покинул ее, но статические переменные будут воссозданы в их значение инициализации.
Постарайтесь привыкнуть к тому, как работает жизненный цикл активности Android . Использование этого подхода приведет к меньшему количеству используемой памяти и гораздо лучшему пользовательскому опыту.
Может быть, мне что-то не хватает, но почему бы просто не использовать механизм startActivityForResult
и onActivityResult
? Вы можете получить результат от вашей вспомогательной деятельности из намерения, с которым она была связана.
Изменить: Кстати, насколько я понимаю, если вы запустите Object.wait ()
из кода Activity
, если он будет удерживать протектор пользовательского интерфейса, это может привести к Приложение не отвечает
ошибка.
Посмотрите пример Notepad, в нем рассматривается именно эта ситуация. И как уже говорили другие, способ Android заключается в том, чтобы ваша первая активность запускала вторую активность (не под-активность!) и асинхронно слушала ответ (без паузы или ожидания, без необходимости присоединения и т.д.).
Ну ... вы можете сделать это вот так (кстати, прямого пути нет):
У вас есть одноэлементный класс, назовем его Monitor:
public class Singleton
{
private Singleton() { }
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
}
public class ParentActivity extends Activity
{
private void startAndWait()
{
Intent i = new Intent();
// initialize i
startActivityForResult(i);
Singleton si = Singleton.getInstance();
synchronized(si)
{
si.wait();
}
//do remaining work
}
}
public class ChildActivity extends Activity
{
protected void onCreate(Bundle savedInstance)
{
//do all the work
Singleton si = Singleton.getInstance();
synchronized(si)
{
si.notify();
}
}
}