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

Повторение операции в фоне - Android

Восстановить пароль Регистрация
 
Милитари
2 / 2 / 1
Регистрация: 17.07.2013
Сообщений: 103
12.08.2016, 09:06     Повторение операции в фоне #1
Разобрался с парсингом
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
package com.example.nikolay.vmagaz;
 
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
 
public class MainActivity extends AppCompatActivity {
    private static final int NOTIFY_ID = 101;
    private TextView textView;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        textView = (TextView) findViewById(R.id.textView);
 
        new MyParser().execute("http://xn--80aaefv0am4bqv.xn--p1ai/t.php");
 
    }
 
 
 
    private class MyParser extends AsyncTask<String, Void, String> {
 
        @Override
        protected String doInBackground(String... links) {
            Document doc = null;
            try {
                doc = Jsoup.connect(links[0]).get();
 
            } catch (Exception e) {
                e.printStackTrace();
            }
 
 
            return doc.title();
        }
 
        @Override
        protected void onPostExecute(String result) {
 
                String response;
                response = result;
                textView.setText(response);
 
 
        }
 
    }
}
Теперь я наконец то получаю значение title со странички сайта

Далее мне было необходимо сделать так, что бы данная операция повторялась каждые 30 секунд

Я пробывал помещать весь класс myParser в класс myTimer(на данный момент его нет)

Но получается так: приложение запускается, делает первый запрос, выводит в textview, делает второй, выводит в textview и сразу же крашится

Но IDE показывает, что приложение запущено на отладочном устройстве

Помогите понять, как работают циклы и таймеры в java
В php\js это для меня казалось обыденностью
Но после того как я немного повозился с кодом java, код php выглядит для меня сбродом
Спасибо!
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
korshun84
13 / 68 / 14
Регистрация: 08.07.2014
Сообщений: 349
12.08.2016, 09:13     Повторение операции в фоне #2
Цитата Сообщение от Милитари Посмотреть сообщение
приложение запускается, делает первый запрос, выводит в textview, делает второй, выводит в textview и сразу же крашится
Ну так смотрите, по какой причине крашится, чего как маленький то ?
Милитари
2 / 2 / 1
Регистрация: 17.07.2013
Сообщений: 103
12.08.2016, 09:29  [ТС]     Повторение операции в фоне #3
На данный момент нет возможности запустить студию
Но я более чем уверен, что дело в том, что я как то не правильно использую AsynkTask внутри таймера
Вечером скину LogCat тогда
CoolMind
411 / 394 / 65
Регистрация: 06.10.2012
Сообщений: 1,701
12.08.2016, 11:13     Повторение операции в фоне #4
Цитата Сообщение от Милитари Посмотреть сообщение
пробывал
Когда уже школьники научатся писать правильно? Заколебало видеть это извращённое слово.
Цитата Сообщение от Милитари Посмотреть сообщение
помещать весь класс myParser в класс myTimer(на данный момент его нет)
Предлагаете без кода пофантазировать на тему, где может упасть?

Добавлено через 24 секунды
Цитата Сообщение от Милитари Посмотреть сообщение
Но я более чем уверен
Так могут сказать мастера своего дела.
Милитари
2 / 2 / 1
Регистрация: 17.07.2013
Сообщений: 103
12.08.2016, 22:22  [ТС]     Повторение операции в фоне #5
Так могут сказать те, кто знаком с другими языками программирования и только начал вникать в этот)
"Более чем уверен" что Вы так же допускаете такие ошибки в процессе написания текста, но, почему то, себе замечаний не делаете)

Добавлено через 3 часа 36 минут
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
package com.example.nikolay.vmagaz;
 
import android.os.AsyncTask;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.widget.TextView;
 
import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;
 
import java.util.Timer;
import java.util.TimerTask;
 
public class MainActivity extends AppCompatActivity {
    private static final int NOTIFY_ID = 101;
    private TextView textView;
    int time = 0;
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        textView = (TextView) findViewById(R.id.textView);
 
 
 
        Timer timer = new Timer();
        long delay = 0;
        long period = 1000;
        timer.scheduleAtFixedRate(new TimerTask() {
            @Override
            public void run() {
                time++;
                runOnUiThread(new Runnable() {
                    @Override
                    public void run() {
                        new MyParser().execute("http://xn--80aaefv0am4bqv.xn--p1ai/t.php");
                    }
                });
            }
        }, delay, period);
 
    }
 
 
 
    public class MyParser extends AsyncTask<String, Void, String> {
 
        @Override
        protected String doInBackground(String... links) {
            Document doc = null;
            try {
                doc = Jsoup.connect(links[0]).get();
 
            } catch (Exception e) {
                e.printStackTrace();
            }
 
 
            return doc.title();
        }
 
        @Override
        protected void onPostExecute(String result) {
 
                String response;
                response = result;
                textView.setText(response);
 
 
        }
 
    }
}
Решил вот таким вот способом.
Скажите пожалуйста, если свернуть приложение, будет ли выполняться код AsynkTasks?
Т.е например выводится уведомление в зависимости от полученного результата, а не менять текст в textView.
Все это я написать смогу, хочу узнать лишь, будет ли работать так как задумано?

P.S

Будет, ведь все условия находятся в классе MyParser
Таймером мы лишь его запускаем когда нам угодно

Добавлено через 2 часа 35 минут
Цитата Сообщение от Милитари Посмотреть сообщение
Скажите пожалуйста, если свернуть приложение, будет ли выполняться код AsynkTasks?
Да.
Цитата Сообщение от Милитари Посмотреть сообщение
Т.е например выводится уведомление в зависимости от полученного результата, а не менять текст в textView.
Да.
Я все сделал, спасибо Вам большое
petruchodd
16.08.2016, 03:52
  #6

Не по теме:

напишите название финального приложения в гугл плей? Хочу сразу такое добавить в черный список. Это идеальное приложение для пожирания трафика.

vxg
Модератор
 Аватар для vxg
2726 / 1737 / 173
Регистрация: 13.01.2012
Сообщений: 6,508
16.08.2016, 06:58     Повторение операции в фоне #7
petruchodd, ну подключился ну скачал ну потратил трафик - как без трафика вы сделали бы то что он делает? Предложите ваш вариант
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.08.2016, 11:22     Повторение операции в фоне
Еще ссылки по теме:

Строка: убрать повторение строк Android
Android Использование микрофона в фоне
Как организовать повторение будильника через setExact()? Android
Android Повторение фоновой картинки с указанием размера
Android Приём сообщений от сервера в фоне

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

Или воспользуйтесь поиском по форуму:
Паблито
не спать!
1882 / 1616 / 500
Регистрация: 12.05.2014
Сообщений: 5,836
Завершенные тесты: 1
16.08.2016, 11:22     Повторение операции в фоне #8
вообще уже много раз писалось (в том числе и в этой ветке форума) как адекватно делается повторение задачи
просто на вопросы в стиле "поднимите мне веки" очень трудно начинать отвечать - много писать, вопрос слишком размытый и т.д.

по теме: автор вопроса, а что будет если твоя задача-парсер будет работать больше 30 сек?
Ее нужно убить или остановить и запустить новую или задачи будут становиться в очередь? Или остчет 30 сек будет начинаться после окончания работы задачи?

В пакете cuncurrency джавы есть куча Executors на любые случаи жизни. Советчики TimerTask-а горите в аду.
примерный код
Java
1
2
        final ScheduledExecutorService executorService = Executors.newSingleThreadScheduledExecutor();
        executorService.schedule(runnableTask, delay, TimeUnit.MILLISECONDS); // delay - the time from now to delay execution
Yandex
Объявления
16.08.2016, 11:22     Повторение операции в фоне
Ответ Создать тему
Опции темы

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