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

Модификатор synchronized и Runnable - Android

Восстановить пароль Регистрация
Другие темы раздела
Android Прокладка маршрута http://www.cyberforum.ru/android-dev/thread1646444.html
Всем привет. Хочу реализовать приложение для прокладке оптимального маршрута (яндекс метро для примера) для общественного транспорта в своём городе (насиление 500\600 тыс. чел. ) Кто в курсе с чего начать, в смысле дай те направления с чего начать копать? Спасибо
Android Определение местоположения Только начинаю осваивать программирование для андроида. Английский знаю плохо, поэтому толковой литературы на русском найти не смог :) Вот собственно вопрос: Что необходимо(в техническом и программном плане) и как можно реализовать приложение, которое отслеживает местоположение телефонов на которых установлено. Данные местоположения всех устройств с приложением должны отправляться на сервер... http://www.cyberforum.ru/android-dev/thread1646435.html
Сбой OutOfMemoryError Android
java.lang.OutOfMemoryError: Failed to allocate a 12960012 byte allocation with 5594672 free bytes and 5MB until OOM at dalvik.system.VMRuntime.newNonMovableArray(Native Method) at android.graphics.BitmapFactory.nativeDecodeAsset(Native Method) at android.graphics.BitmapFactory.decodeStream(BitmapFactory.java:609) at...
Android Потерял код программы, как восстановить из приложения?
Здравствуйте, уважаемые программисты! Мне очень нужна ваша помощь!! Дело в том, что я потерял код своей программы, можно ли его как-то восстановить, если у меня есть она на телефоне, как-то вскрыть ее код? Я пробовал с помощью программы ShowJava, но она очень коряво это делает, непонятно что вообще выдает мне а не код... Заранее большое спасибо!!
Android Непонятная ошибка http://www.cyberforum.ru/android-dev/thread1646374.html
Error:Error: Duplicate resources: D:\Education\Программы\passwordgenerator\app\src\main\res\drawable\yandex.png:drawable/yandex, D:\Education\Программы\passwordgenerator\app\src\main\res\drawable\yandex.jpg:drawable/yandex абсолютно непонятная ошибка... быть может, вы что-то знаете о ней?.. Заранее спасибо!
Android Крэшится при запуске. Небольшой и простой код Приложение крэшится при запуске. Что я сделал не так? Также, пользуясь случаем, хочу узнать - как запросить у пользователя при включении приложухи включить bluetooth? Я закомментировал REQUEST_ENABLE_BT , т.к. не понимаю к чему это обращается import android.bluetooth.*; import android.content.Intent; import android.support.v7.app.AppCompatActivity; import android.os.Bundle; import... подробнее

Показать сообщение отдельно
DarkVortex
102 / 68 / 18
Регистрация: 07.07.2014
Сообщений: 239
24.01.2016, 22:50     Модификатор synchronized и Runnable
Имеется сервис в котором крутится поток работающий с сетью, проблема в том, что при некоторых(больше месяца пытаюсь понять каких) обстоятельствах создается несколько экземпляров этого сервиса.
Перед запуском проверяю не запущен ли он так:
Java
1
2
3
4
5
6
7
8
9
ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
List<ActivityManager.RunningServiceInfo> rs = am.getRunningServices(Integer.MAX_VALUE);
boolean run = true;
for (int i = 0; i < rs.size(); i++) {
        ActivityManager.RunningServiceInfo rsi = rs.get(i);
    if(rsi.service.getClassName().contains("MyService")){
        run = false;   
        }
}
Но почему-то на некоторых устройствах сервис все равно запускается повторно(Зависимость в моделях и прошивках не нашел) но проблема возникает на android 4.4+.
Не придумав ничего лучше решил сделать так:
Java
1
2
3
4
5
6
public class MyClient implements Runnable{
    public synchronized void run(){
        //code
        
        }
}
Вручную запустил несколько потоков и как и ожидал все они выполнились последовательно. Выпустил в релиз но проблема не решилась. Некоторые клиенты работают с несколькими потоками, в нормальном случае в приложении не больше 6 потоков, у проблемных устройств их много больше. Физического доступа к ним к сожалению нет, на своих устройствах воспроизвести проблему не удалось.
Использование IntentService не подойдет, т.к. сервис должен стартовать в основном потоке.
Как можно гарантировать запуск только 1 экземпляра сервиса? Что-то у меня совсем не выходит(

Добавлено через 12 минут
Пример лога от проблемного устройства
Bash
1
2
3
4
5
6
7
8
9
10
1453658697.64 : 66 : 46.200.243.230 -> 1: LOGIN:||:356417062239070:||:API1:||:16596:||:26
1453658697.71 : 66 : 356417062239070 <- GET_CONNECTION_TYPE
1453658697.79 : 68 : 46.200.243.230 -> 1: LOGIN:||:356417062239070:||:API1:||:16550:||:26
Close duplicate connection 356417062239070
1453658697.85 : 68 : 356417062239070 <- GET_CONNECTION_TYPE
1453658697.85 : 69 : 46.200.243.230 -> 1: LOGIN:||:356417062239070:||:API1:||:16602:||:26
Close duplicate connection 356417062239070
1453658697.91 : 69 : 356417062239070 <- GET_CONNECTION_TYPE
1453658697.91 : 70 : 46.200.243.230 -> 1: LOGIN:||:356417062239070:||:API1:||:16623:||:26
Close duplicate connection 356417062239070
Предпоследнее значение id потока, последнее количество потоков в процессе, т.е. на модификатор synchronized ему явно плевать. Мне кажется это не очень нормальное поведение.

Добавлено через 56 минут
Теоретически дубликат сервиса может запуститься таким образом: поскольку за жизнью сервиса следит AlarmManager может произойти так, что android грохнет сервис из-за внешних факторов, сработает AlarmManager и запустит его, затем android решит воскресить старый сервис (он же липкий START_STICKY) и вот уже 2 сервиса. Возможно на загруженном кучей приложений устройстве это происходит достаточно часто.
Тогда задача сводится к следующему, как сделать так чтобы работал только 1 поток, попробую сделать из него singleton...
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 12:12. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru