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

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

Войти
Регистрация
Восстановить пароль
 
 
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
#1

Узнать завершил ли работу Activity (не AsyncTask) - Программирование Android

16.09.2014, 15:08. Просмотров 1077. Ответов 21
Метки нет (Все метки)

Добрый день ув. Программисты.
- Имеется ImageLoader.java работает без AsyncTask.
- И Имеется MainActivity.java главная Activity.

Вопрос: Как из MainActivity определить что ImageLoader завершил свою работу???
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2014, 15:08
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Узнать завершил ли работу Activity (не AsyncTask) (Программирование Android):

Узнать текущую Activity - Программирование Android
Всех с новым годом! Из главной активити запускается событие таймера. Скажите, как определить какая активити в текущий момент активна? ...

Узнать будет ли Activity пересоздана - Программирование Android
Для того, чтобы узнать будет ли Activity завершена есть метод isFinishing(). Помогите, пожалуйста, кто знает, есть ли метод для того, чтобы...

При открытии программы узнать данные, которые хранятся в второй форме Activity, не переходя на неё - Программирование Android
Как на Android Studio передать информацию? Нужны при открытии программы узнать данные которые хранятся в второй форме Activity, не переходя...

Приложение зависает, если свернуть и развернуть Activity или перейти на другую Activity - Программирование Android
У меня в параллельном потоке происходит куча apply() Решение использовать apply вместо commit было принято из-за скорости. Но...

Android - Передача данных с одного Activity на другое Activity - Программирование Android
Здравствуйте , возникла необходимость получения числовых (int и float ну или double) данных в одном Activity , а обработка и вывод...

Изменение layout-элементов одного activity из другого activity - Программирование Android
Здравствуйте! Я хочу изменить размер или цвет текста TextView в одном activity из второго activity, каким образом мне можно это...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
ILNAR_93
Android
221 / 221 / 23
Регистрация: 19.01.2013
Сообщений: 1,686
Записей в блоге: 3
16.09.2014, 15:13 #2
типо того чтоли ?:

Java
1
2
3
4
5
6
7
8
9
void ImageLoader()
{
status=true;
...
...
...
status=false;
 
}
0
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
16.09.2014, 15:16  [ТС] #3
Цитата Сообщение от ILNAR_93 Посмотреть сообщение
типо того чтоли ?:

Java
1
2
3
4
5
6
7
8
9
void ImageLoader()
{
status=true;
...
...
...
status=false;
 
}
Ага типа такого только в ImageLoader очень много процедур и функций который между собой пересекаются. и по Дэбагу так и не нашел где последний раз завершается действие... ((

Добавлено через 1 минуту
Статус тру я могу поставить в начале а вот фолс куда поставить не понятно((
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
16.09.2014, 15:20 #4
прицепиться к этому потоку типа так
Java
1
myImageLoader.join();
или проверять, существует ли тред
Java
1
myImageLoader.isAlive();
первое, что пришло в голову
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
16.09.2014, 15:54 #5
Паблито, join из ui повесит его.
0
Pablito
2494 / 1939 / 605
Регистрация: 12.05.2014
Сообщений: 6,798
Завершенные тесты: 1
16.09.2014, 16:12 #6
не учел
тогда запустить отдельный поток и из него делать join, особой нагрузки это не должно создать
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
16.09.2014, 16:17 #7
Я думаю, что в этом случае пригодится интерфейс в качестве callback-а.
Java
1
2
3
4
public interface LoaderListener {
    void onBegin();
    void onLoadComplete();
}
и прокинуть его в ImageLoader. Но только в том случае, если ImageLoader запрашивается в activity. иначе придётся костылять ))
0
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
16.09.2014, 16:32  [ТС] #8
Я не особо силен. AsyncTask это поток с doinbackground. onpostexecute, onpreexecyte и так далее. Но в ImageLoader нету AsyncTask там только всякие процедуры и функции....
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
16.09.2014, 16:38 #9
cezer_ak, Покажите imageloader. Это Ваш или готовый чей-то?
0
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
16.09.2014, 17:00  [ТС] #10
Нет ImageLoader не мой, взят с просторов интернета. Суть его в загрузке изображений и кэширования с сохранением в память телефона.

Кликните здесь для просмотра всего текста
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.BitmapFactory;
import android.util.Log;
import android.widget.ImageView;
 
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.HttpURLConnection;
import java.net.URL;
import java.util.Collections;
import java.util.Map;
import java.util.WeakHashMap;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
 
 
public class ImageLoader {
    public boolean status;
 
    private static final String TAG = "MyApp";
    MemoryCache memoryCache=new MemoryCache();
    FileCache fileCache;
    private Map<ImageView, String> imageViews=Collections.synchronizedMap(new WeakHashMap<ImageView, String>());
    ExecutorService executorService;
 
 
    public ImageLoader(Context context){
        fileCache=new FileCache(context);
        executorService=Executors.newFixedThreadPool(5);
        Log.d(TAG, "1");
    }
    
    final int stub_id = R.drawable.loading_ani;
 
 
 
    public void DisplayImage(String url, ImageView imageView)
    {
        status=true;
        imageViews.put(imageView, url);
        Bitmap bitmap=memoryCache.get(url);
        if(bitmap!=null)
 
            imageView.setImageBitmap(bitmap);
        else
        {
            queuePhoto(url, imageView);
            imageView.setImageResource(stub_id);
        }
        Log.d(TAG, "2");
    }
        
    private void queuePhoto(String url, ImageView imageView)
    {
        PhotoToLoad p=new PhotoToLoad(url, imageView);
        executorService.submit(new PhotosLoader(p));
        Log.d(TAG, "3");
 
    }
    
    private Bitmap getBitmap(String url) 
    {
        File f=fileCache.getFile(url);
        
        //from SD cache
        Bitmap b = decodeFile(f);
        if(b!=null)
            return b;
        
        //from web
        try {
            Bitmap bitmap=null;
            URL imageUrl = new URL(url);
            HttpURLConnection conn = (HttpURLConnection)imageUrl.openConnection();
            conn.setConnectTimeout(30000);
            conn.setReadTimeout(30000);
            conn.setInstanceFollowRedirects(true);
            InputStream is=conn.getInputStream();
            OutputStream os = new FileOutputStream(f);
            Utils.CopyStream(is, os);
            os.close();
            bitmap = decodeFile(f);
            Log.d(TAG, "4");
            return bitmap;
        } catch (Exception ex){
           ex.printStackTrace();
            Log.d(TAG, "5");
           return null;
 
        }
 
    }
 
    //decodes image and scales it to reduce memory consumption
    private Bitmap decodeFile(File f){
        try {
            //decode image size
            BitmapFactory.Options o = new BitmapFactory.Options();
            o.inJustDecodeBounds = true;
            BitmapFactory.decodeStream(new FileInputStream(f),null,o);
            
            //Find the correct scale value. It should be the power of 2.
            final int REQUIRED_SIZE=70;
            int width_tmp=o.outWidth, height_tmp=o.outHeight;
            int scale=1;
            while(true){
                if(width_tmp/1040<REQUIRED_SIZE || height_tmp/530<REQUIRED_SIZE)
                    break;
                width_tmp/=1040;
                height_tmp/=530;
                scale*=2;
            }
            
            //decode with inSampleSize
            BitmapFactory.Options o2 = new BitmapFactory.Options();
            o2.inSampleSize=scale;
            Log.d(TAG, "6");
            return BitmapFactory.decodeStream(new FileInputStream(f), null, o2);
        } catch (FileNotFoundException e) {}
        Log.d(TAG, "7");
        return null;
    }
    
    //Task for the queue
    private class PhotoToLoad
    {
        public String url;
        public ImageView imageView;
        public PhotoToLoad(String u, ImageView i){
            url=u; 
            imageView=i;
            Log.d(TAG, "8");
        }
    }
    
    class PhotosLoader implements Runnable {
        PhotoToLoad photoToLoad;
        PhotosLoader(PhotoToLoad photoToLoad){
            this.photoToLoad=photoToLoad;
        }
        
        @Override
        public void run() {
            if(imageViewReused(photoToLoad))
                return;
            Bitmap bmp=getBitmap(photoToLoad.url);
            memoryCache.put(photoToLoad.url, bmp);
            if(imageViewReused(photoToLoad))
                return;
            BitmapDisplayer bd=new BitmapDisplayer(bmp, photoToLoad);
            Activity a=(Activity)photoToLoad.imageView.getContext();
            a.runOnUiThread(bd);
            Log.d(TAG, "9");
        }
    }
    
    boolean imageViewReused(PhotoToLoad photoToLoad){
        String tag=imageViews.get(photoToLoad.imageView);
        if(tag==null || !tag.equals(photoToLoad.url))
            return true;
        return false;
    }
    
    //Used to display bitmap in the UI thread
    class BitmapDisplayer implements Runnable
    {
        Bitmap bitmap;
        PhotoToLoad photoToLoad;
        public BitmapDisplayer(Bitmap b, PhotoToLoad p){bitmap=b;photoToLoad=p;}
        public void run()
        {
            if(imageViewReused(photoToLoad))
                return;
            if(bitmap!=null)
                photoToLoad.imageView.setImageBitmap(bitmap);
            else
                photoToLoad.imageView.setImageResource(stub_id);
 
        }
 
 
    }
    status=false;
 
    public void clearCache() {
        memoryCache.clear();
        fileCache.clear();
    }
 
}

Хотя я только сейчас увидел TreadPooll Tread это же и есть поток да?

Добавлено через 9 минут
Цитата Сообщение от YuraAAA Посмотреть сообщение
Но только в том случае, если ImageLoader запрашивается в activity. иначе придётся костылять ))
Последовательность такая: Запуск MainActivity->Запуск потока в MainActivity->LazyAdapter->ImageLoader->FileCash->Вывод Загруженых данных в ListView. Надеюсь ничего не упустил)))
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
16.09.2014, 17:04 #11
cezer_ak, а не хотите взять такую? https://github.com/nostra13/Android-Universal-Image-Loader
0
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
16.09.2014, 17:09  [ТС] #12
С удовольствием взял бы только уже все готово осталась только проверку выполнения сделать. Для чего нужна проверка могу обьяснить: у меня во время загрузки данных с сервера появляется прогресс диалог но он завершается раньше чем загрузятся изображения. Т.е. Текст загрузился прогресс диалог пропал. А изображения еще не загруженны и подгружаются.
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
16.09.2014, 17:14 #13
cezer_ak, тогда это проблемка...) надо как-то мониторить очередь в executor-е. И когда она пустая сообщать об этом.
0
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
16.09.2014, 17:19  [ТС] #14
А с имэйдждоадером не прокатит проверка завершен он или нет?
0
YuraAAA
1574 / 1316 / 271
Регистрация: 25.10.2009
Сообщений: 3,438
Записей в блоге: 2
16.09.2014, 17:24 #15
Цитата Сообщение от cezer_ak Посмотреть сообщение
executorService.submit(new PhotosLoader(p));
Создаётся список тасок (пул потоков) и довольно тяжело отследить когда они завершаются.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2014, 17:24
Привет! Вот еще темы с ответами:

Из одного Activity получить значение другого Activity - Программирование Android
Запускаю активити: public class MainActivity extends Activity { ... ... Intent intent = new Intent(getBaseContext(),...

Вызвать из одной activity функцию другой activity - Программирование Android
вызвать из одного activity функцию другой activity Подскажите, можно ли такое реализовать? Допустим у меня есть основная активити и...

Из одной Activity запустить функцию другой Activity - Программирование Android
например есть Activity2 которое я показываю в Dialog окошке, там у меня находятся Date and Time Picker ы (Дата - начало, Дата - окончание)...

Создание Activity в другом Activity - Программирование Android
Нормально ли создавать экземпляр какого-либо Activity в текущем Activity? Дело в том, что код, нужный для работы с данными находится в...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
16.09.2014, 17:24
Ответ Создать тему
Опции темы

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