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

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

Войти
Регистрация
Восстановить пароль
 
d1psy
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 9
#1

TimerTask/Handler запускаются только 1 раз - Программирование Android

26.09.2015, 20:22. Просмотров 218. Ответов 0
Метки нет (Все метки)

Мне нужно, что-бы в сервисе TimerTask или Handler работали постоянно. Но когда я запускаю программу, они срабатывают только 1 раз. Может у меня где-то ошибка? Вот мой код с использованием Handler
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Timer timer = new Timer();
    DB2 db;
    Cursor cursor;
    Calendar x = Calendar.getInstance();
    int y = x.get(Calendar.YEAR);
    int m = x.get(Calendar.MONTH) + 1;
    int d = x.get(Calendar.DAY_OF_MONTH);
    int h = x.get(Calendar.HOUR_OF_DAY);
    int min = x.get(Calendar.MINUTE);
    int s = x.get(Calendar.SECOND);
    private Handler handler = new Handler();
    NotificationManager nm;
    int l, p, a, i, month, hours, minutes, seconds, m22, d22, v, g, t;
    int[] k = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 
    private void runOnUiThread(Runnable runnable) {
        handler.post(runnable);
    }
 
    private Runnable runnable = new Runnable() {
        @Override
        public void run() {
            db.open();
            cursor = db.getAllData();
            cursor.moveToFirst();
            if (cursor.moveToFirst()) {
                do {
                    int d110 = cursor.getInt(cursor.getColumnIndex("day"));
                    //Тут манипуляции с числами. При первом срабатывании Handler присылает уведомление, если выполнено условие
                    if (m22 == 0)
                        if (d22 == 0)
                            if (v == 0)
                                if (g == 0)
                                    not();
                    
                }
                while (cursor.moveToNext());//takes next item
                cursor.close();
            }
            handler.postDelayed(this, 30000);
        }
 
    };
 
 
    public void onCreate() {
        super.onCreate();
        handler.postDelayed(runnable, 30000);
        nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    }
 
 
 
 
 
    public void not() {
        Intent resultIntent = new Intent(this, TEST2.class);
        NotificationCompat.Builder mBuilder =
                new NotificationCompat.Builder(this)
                        .setSmallIcon(R.mipmap.ic_launcher)
                        .setContentTitle("My notification")
                        .setContentText("Hello World!");
        int mNotificationId = 001;
        NotificationManager mNotifyMgr =
                (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
        PendingIntent resultPendingIntent =
                PendingIntent.getActivity(
                        this,
                        0,
                        resultIntent,
                        PendingIntent.FLAG_UPDATE_CURRENT
                );
        mBuilder.setContentIntent(resultPendingIntent);
        mNotifyMgr.notify(mNotificationId, mBuilder.build());
    }
 
    public int onStartCommand(Intent intent, int flags, int startId) {
        // TODO Auto-generated method stub
        handler.postDelayed(runnable, 30000);
        db = new DB2(this);
        db.open();
 
        Toast.makeText(getApplicationContext(), "Service Running ", 1).show();
        return super.onStartCommand(intent, flags, startId);
    }
 
 
    @Override
    public IBinder onBind(Intent intent) {
        // TODO: Return the communication channel to the service.
        throw new UnsupportedOperationException("Not yet implemented");
    }
Вот этот-же код, только с timerTask
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
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
Timer timer = new Timer();
DB2 db;
Cursor cursor;
Calendar x = Calendar.getInstance();
int y = x.get(Calendar.YEAR);
int m = x.get(Calendar.MONTH) + 1;
int d = x.get(Calendar.DAY_OF_MONTH);
int h = x.get(Calendar.HOUR_OF_DAY);
int min = x.get(Calendar.MINUTE);
int s = x.get(Calendar.SECOND);
Handler handler;
NotificationManager nm;
int l, p, a, i, month, hours, minutes, seconds, m22, d22, v, g, t;
int[] k = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
 
class UpdateTimeTask extends TimerTask{
    public void run(){
        MS2.this.runOnUiThread(new Runnable() {
            @Override
            public void run() {
                db.open();
                cursor = db.getAllData();
                cursor.moveToFirst();
                if (cursor.moveToFirst()) {
                    do {
                        int d110 = cursor.getInt(cursor.getColumnIndex("day")); //here it should do some manipulations with every item in DB.
 
                        if (m22 == 0)
                            if (d22 == 0)
                                if (v == 0)
                                    if (g == 0)
                                        not();
                    }
                    while (cursor.moveToNext());//takes next item
 
                }cursor.close();
            }
        });
        
    }
}
private void runOnUiThread(Runnable runnable) {
    handler.post(runnable);
}
 
public void onCreate() {
    super.onCreate();
    handler = new Handler();
    nm = (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
}
 
 
 
 
 
public void not() {
    Intent resultIntent = new Intent(this, TEST2.class);
    NotificationCompat.Builder mBuilder =
            new NotificationCompat.Builder(this)
                    .setSmallIcon(R.mipmap.ic_launcher)
                    .setContentTitle("My notification")
                    .setContentText("Hello World!");
    int mNotificationId = 001;
    NotificationManager mNotifyMgr =
            (NotificationManager) getSystemService(NOTIFICATION_SERVICE);
    PendingIntent resultPendingIntent =
            PendingIntent.getActivity(
                    this,
                    0,
                    resultIntent,
                    PendingIntent.FLAG_UPDATE_CURRENT
            );
    mBuilder.setContentIntent(resultPendingIntent);
    mNotifyMgr.notify(mNotificationId, mBuilder.build());
}
 
public int onStartCommand(Intent intent, int flags, int startId) {
    // TODO Auto-generated method stub
    db = new DB2(this);
    db.open();
    Toast.makeText(getApplicationContext(), "Service Running ", 1).show();
    timer.schedule(new UpdateTimeTask(), 0, 1000);
 
    return super.onStartCommand(intent, flags, startId);
}
 
 
@Override
public IBinder onBind(Intent intent) {
    // TODO: Return the communication channel to the service.
    throw new UnsupportedOperationException("Not yet implemented");
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2015, 20:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос TimerTask/Handler запускаются только 1 раз (Программирование Android):

Timer и TimerTask - Программирование Android
Пишу программу для андроида в eclipse. Столкнулся с такой проблемой: нужно чтобы после нажатия на картинку она через секунду сменилась на...

Запись видео TimerTask() - Программирование Android
Нужно записывать видео при нажатии на кнопку(видео определенной длительности например 10 мин) и создавалось несколько видео файлов пока не...

Показать только один раз - Программирование Android
Подскажите, как можно показать заставку(это может быть изображение, или активность с imageView) только при первом запуске приложения??? При...

OnTouch MotionEvent в андроид выполняется только один раз - Программирование Android
Так вот сам вопрос: MotionEvent.ACTION_UP выполняется только первый раз, что при использовании if, что case. Кликаем по копке звук...

Handler - Программирование Android
Вот допустим обьект Handler был создан в активити(то есть в главном потоке). И мы запускаем через этот Handler (его метод post) кусок кода...

Handler - Программирование Android
import android.app.Activity; import android.os.Bundle; import android.os.Handler; import android.os.Message; import...

0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.09.2015, 20:22
Привет! Вот еще темы с ответами:

Не работает Handler - Программирование Android
Я нахожусь на 66 уроке startandroid, здесь упоминается Handler. Почему то отсутствуют у меня методы, которые описываются тут. Вот фрагмент...

Handler timer - Программирование Android
Добрый вечер. С помощью какого метода в Handler http://developer.android.com/reference/android/os/Handler.html(беда пока с английским) ,...

Handler vs Service vs AsynkTask - Программирование Android
Есть 2 Activity, пусть A1 и A2. В методе onCreate() Activity A1 запускается новый поток, в котором определяются координаты местоположения...

Handler и интервал времени - Программирование Android
Создаю хэндлер: Handler h = new Handler(); h.post(obrtimer); Runnable obrtimer = new Runnable() { public void run() { ...


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

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

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