Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Программирование Android

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 46, средняя оценка - 4.80
Creative
22 / 8 / 1
Регистрация: 13.07.2012
Сообщений: 66
#1

Как закрывать приложение? - Программирование Android

01.11.2012, 17:52. Просмотров 6499. Ответов 16
Метки нет (Все метки)

Заранее извеняюсь за глупый вопрос, но чет не могу найти ответа, или не так задаю вопрос гуглу))

как закрыть приложение? какой метод это делает? пользую finish(); но он закрывает только текущую активити, а как выйти совсем?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
01.11.2012, 17:52
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как закрывать приложение? (Программирование Android):

Как красиво закрывать приложение? - Программирование Android
Здравствуйте! Столкнулся с проблемой: если я закрываю своё приложение при помощи диалогового окна, то выглядит это очень некрасиво. Это...

Как открывать/закрывать NavigationDrawer кнопкой "Menu" - Программирование Android
собсно и вопрос в этом, где и что повесить на хардварную кнопку меню чтоб вызывался NavigationDrawer?

Допиленное узкоспециализированное приложение или неповоротливое многофункциональное приложение? - Программирование Android
Если вопрос про "что нужно знать?" висит, то и этот должен зайти. Появилась дилемма при выборе идеи для приложения, хочу узнать Ваше...

Узнать приложение которое запустило моё приложение - Программирование Android
Приветствую всех! Помогите разобраться. Есть ли возможность узнать, что за приложение запустило моё приложение? т.е. к примеру мою...

Как оптимизировать приложение? - Программирование Android
При загрузке apk-файла в google play выдает ошибку==>Архив APK-файла не оптимизирован. Запустите инструмент оптимизации, а затем повторите...

Как запустить приложение? - Программирование Android
Здравствуйте, помогите разобраться пожалуйста, я скачала JDK, Eclipse, и создала первое приложение, Hello, но не понимаю как же мне...

16
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.11.2012, 18:15 #2
а зачем?
0
Creative
22 / 8 / 1
Регистрация: 13.07.2012
Сообщений: 66
01.11.2012, 18:53  [ТС] #3
Вообще хороший вопрос) хотел в менюшке каждой активити реализовать кнопку выход.
0
Digetix
104 / 104 / 1
Регистрация: 09.04.2012
Сообщений: 651
01.11.2012, 19:05 #4
На примере двух Activity: MainActivity и SecondActivity

Стартовое(корневое) - MainActivity. Из него вызывается SecondActivity.

В SecondActivity есть некая кнопка "выход". На ее нажатие вешаем:
Java
1
2
3
4
5
6
7
Intent intent = new Intent(this, MainActivity.class);
 
intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
 
intent.putExtra("finish", true);
 
startActivity(intent);
Этот код вызывает MainActivity и чистит весь стек над ним. И посылаем метку закрытия


В MainActivity в onCreate сразу после конструктора суперкласса пишем
Java
1
if (getIntent().getBooleanExtra("finish", false)) finish();
Проверка, если пришла метка закрытия, то закрываемся
1
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
01.11.2012, 19:54 #5
обычно когда есть кнопка аля выход, после ее нажатия открывается аля логин активити. в других случаях не вижу смысла в этой кнопке, у юзера всегда есть кнопка бек и хом.
0
mks81
7 / 7 / 0
Регистрация: 12.10.2012
Сообщений: 51
01.11.2012, 20:04 #6
Что подразумевается под "закрыть приложение", остановить все активити, службы и потоки? У каждого из них есть свой метод)
0
kvaka
31 / 31 / 3
Регистрация: 26.06.2012
Сообщений: 166
01.11.2012, 23:14 #7
Мне кажется, что проще всего генерить широковещательное намерение и в каждой активити на него зарегить свой BroadcastReciever, который для каждой активити будет вызывать finish()

А если активити только 2, то можно юзать startActivityForResult и по получении определенного ответа от 2-ой активити закрывать првую
1
YuraAAA
1577 / 1318 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
02.11.2012, 11:46 #8
android.os.Process.killProcess (int pid)

References
Кликните здесь для просмотра всего текста
public static final void killProcess (int pid)
Added in API level 1

Kill the process with the given PID. Note that, though this API allows us to request to kill any process based on its PID, the kernel will still impose standard restrictions on which PIDs you are actually able to kill. Typically this means only the process running the caller's packages/application and any additional processes created by that app; packages sharing a common UID will also be able to kill each other's processes.
0
Creative
22 / 8 / 1
Регистрация: 13.07.2012
Сообщений: 66
02.11.2012, 18:34  [ТС] #9
Лодно, всем спасибо, легче действительно забить на эту кнопку, хоумом выйдут)) я просто надеялся, что есть нечто вроди application.close(); ну или как то так))
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
02.11.2012, 18:52 #10
каждое активити независимо, можно даже с одного апликейшена запускать активити другого апликейшина и получить какой то результат работы этого активити обратно в первый апликейшен, поэтом реализовывать метода аля application.close() не совсем коректно.
0
KODAGEN
3 / 1 / 1
Регистрация: 22.11.2009
Сообщений: 85
11.12.2012, 15:29 #11
Меня добил вопрос "А зачем?" Если человек спрашивает, значит надо
0
YAUHEN
146 / 128 / 6
Регистрация: 29.07.2008
Сообщений: 506
11.12.2012, 15:55 #12
Цитата Сообщение от KODAGEN Посмотреть сообщение
Меня добил вопрос "А зачем?" Если человек спрашивает, значит надо
не факт что надо.
http://blog.radioactiveyak.com/2010/05/when-to-include-exit-button-in-android.html
есть определённые практики и на сколько я знаю, exit button в андройде - плохой стиль.
0
Миниатюры
Как закрывать приложение?  
Vladimirys
309 / 206 / 25
Регистрация: 16.01.2010
Сообщений: 589
11.12.2012, 21:28 #13
Цитата Сообщение от YAUHEN Посмотреть сообщение
есть определённые практики и на сколько я знаю, exit button в андройде - плохой стиль.
Парняга на картинке, явно себя об этом не спрашивал. А если и спрашивал, то тут же убеждал себя в том, что уже он её, точно не делает.
По сути никто не запрещает. То же "андроид мануал" бесконечно информирует о том, что нужно использовать только стандартный UI( для кого его спрашиваться делали - мучилась?). Но народ упорно, придумывают "свои кнопочки". И прочую самодеятельность. А потом юзвери, их (самоделкиных интерфейса) клянут за тормоза. Кстати говоря, возмущений юзеров, по поводу наличия кнопки - Выход, не видел.
0
V0v1k
1159 / 983 / 1
Регистрация: 28.06.2012
Сообщений: 3,462
12.12.2012, 03:01 #14
юзеры просто жмут хом и даже не ищут кнопки выход. если и есть кнопка выход, то под ней подразумевается логаут а не закрытие апликейшина.
0
KODAGEN
3 / 1 / 1
Регистрация: 22.11.2009
Сообщений: 85
12.12.2012, 11:13 #15
Просто у меня такая же проблема. Мне надо отправить письмо со своей программы, уже жне недели бьюсь над этой проблемой. И одно из пробных решений было использование Intent. Открывается Gmail, но вот как сделать чтоб он отправил и сам при этом закрылся, не написано, то смысла в таком решении я не вижу.

Одно из вариантов моего решения есть следующий код

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public void send(String from, String to, String subject,
            String content) throws AddressException, MessagingException {
 
             java.util.Properties props = System.getProperties();
             props.put("mail.smtp.starttls.enable", "true");
             javax.mail.Session session = javax.mail.Session.getDefaultInstance(props, null);
 
             Message msg = new MimeMessage(session);
             msg.setFrom(new InternetAddress(from));
             msg.setRecipient(Message.RecipientType.TO, new InternetAddress(to));
             msg.setSubject(subject);
             msg.setText(content);
             msg.setHeader("Content-type", "text/html; charset=UTF-8");
 
             Transport tr = session.getTransport("smtp");
             tr.connect("smtp.gmail.com", 587, "мой логин", "мой пароль");
    //       msg.saveChanges();      // don't forget this
        //   tr.sendMessage(msg, msg.getAllRecipients());
        //   tr.close();
            }
но в
Java
1
tr.connect("smtp.gmail.com", 587, "мой логин", "мой пароль");
вылетает ексепшин

12-12 07:05:25.141: D/gralloc_goldfish(1152): Emulator without GPU emulation detected.
12-12 07:05:30.001: D/AndroidRuntime(1152): Shutting down VM
12-12 07:05:30.001: W/dalvikvm(1152): threadid=1: thread exiting with uncaught exception (group=0x409961f8)
12-12 07:05:30.091: E/AndroidRuntime(1152): FATAL EXCEPTION: main
12-12 07:05:30.091: E/AndroidRuntime(1152): java.lang.IllegalStateException: Could not execute method of the activity
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.view.View$1.onClick(View.java:3039)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.view.View.performClick(View.java:3480)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.view.View$PerformClick.run(View.java:13983)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.os.Handler.handleCallback(Handler.java:605)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.os.Handler.dispatchMessage(Handler.java:92)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.os.Looper.loop(Looper.java:137)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.app.ActivityThread.main(ActivityThread.java:4340)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.lang.reflect.Method.invokeNative(Native Method)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.lang.reflect.Method.invoke(Method.java:511)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:784)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:551)
12-12 07:05:30.091: E/AndroidRuntime(1152): at dalvik.system.NativeStart.main(Native Method)
12-12 07:05:30.091: E/AndroidRuntime(1152): Caused by: java.lang.reflect.InvocationTargetException
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.lang.reflect.Method.invokeNative(Native Method)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.lang.reflect.Method.invoke(Method.java:511)
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.view.View$1.onClick(View.java:3034)
12-12 07:05:30.091: E/AndroidRuntime(1152): ... 11 more
12-12 07:05:30.091: E/AndroidRuntime(1152): Caused by: android.os.NetworkOnMainThreadException
12-12 07:05:30.091: E/AndroidRuntime(1152): at android.os.StrictMode$AndroidBlockGuardPolicy.onNetwork(StrictMode.java:1084)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetAddress.lookupHostByName(InetAddress.java:391)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetAddress.getAllByNameImpl(InetAddress.java:242)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetAddress.getByName(InetAddress.java:295)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetSocketAddress.<init>(InetSocketAddress.java:105)
12-12 07:05:30.091: E/AndroidRuntime(1152): at java.net.InetSocketAddress.<init>(InetSocketAddress.java:90)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.sun.mail.util.SocketFetcher.createSocket(SocketFetcher.java:233)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.sun.mail.util.SocketFetcher.getSocket(SocketFetcher.java:189)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.sun.mail.smtp.SMTPTransport.openServer(SMTPTransport.java:1359)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.sun.mail.smtp.SMTPTransport.protocolConnect(SMTPTransport.java:412)
12-12 07:05:30.091: E/AndroidRuntime(1152): at javax.mail.Service.connect(Service.java:288)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.example.testemail2.MainActivity.send(MainActivity.java:68)
12-12 07:05:30.091: E/AndroidRuntime(1152): at com.example.testemail2.MainActivity.SendEmail(MainActivity.java:44)
12-12 07:05:30.091: E/AndroidRuntime(1152): ... 14 more
12-12 07:05:32.183: I/Process(1152): Sending signal. PID: 1152 SIG: 9
12-12 07:07:37.281: D/gralloc_goldfish(1198): Emulator without GPU emulation detected.
12-12 07:07:40.861: I/InputQueue-JNI(1198): Sending finished signal for input channel '412e7e10 Packing List (client)' since it is being unregistered while an input message is still in progress.
12-12 07:07:40.951: I/InputQueue-JNI(1198): Ignoring finish signal on channel that is no longer registered.
0
12.12.2012, 11:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
12.12.2012, 11:13
Привет! Вот еще темы с ответами:

Как защитить приложение? - Программирование Android
*.apk без проблем открывается винраром, *.dex, содержащий весь код, также легко декомпилируется с помощью соответствующего софта. Как...

Как привязать приложение к ВК? - Программирование Android
Помогите пожалуйста,мне нужно что-бы приложение делало пост автоматически. Скиньте весь код если не трудно.

Как отредактировать приложение? - Программирование Android
Привет всем, зарегистрировался на вашем форуме столько информации тут глаза разбегаются, помогите пожалуйста, я работаю в такси через...

Как защитить приложение - Программирование Android
Доброго времени суток! Пишу диплом тесно связанный с безопасностью. Функциональную часть моего андроид приложения я уже реализовал и...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
15
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru