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

TimerTask/Handler запускаются только 1 раз - Android

Восстановить пароль Регистрация
 
d1psy
0 / 0 / 0
Регистрация: 27.07.2015
Сообщений: 9
26.09.2015, 20:22     TimerTask/Handler запускаются только 1 раз #1
Мне нужно, что-бы в сервисе 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");
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.09.2015, 20:22     TimerTask/Handler запускаются только 1 раз
Посмотрите здесь:

Android Timer и TimerTask
Handler и интервал времени Android
Про Handler и ProgressBar Android
Android Показать только один раз
Handler timer Android
Handler, поток не останавливается Android
Android OnTouch MotionEvent в андроид выполняется только один раз
Запись видео TimerTask() Android
Handler vs Service vs AsynkTask Android
Android Не работает Handler
Android Handler
Android Handler

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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