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

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

Войти
Регистрация
Восстановить пароль
Другие темы раздела
Android Не задаётся margin для корневого элемента программно http://www.cyberforum.ru/android-dev/thread1257093.html
Всем добрый день! Ниже приведён пример XML-файла: <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:background="#FFFF55EE" android:layout_marginLeft="50dp" android:layout_width="200dp" android:layout_height="200dp" > <Button android:text="Button"
Android Платежная система Google Здравствуйте. Я делаю приложение, в котором аккаунт *действует по принципу подписки..*С помощью аккаунта пользователь может авторизовываться не только в приложении, но и на сайте. Пользователь должен был оплачивать подписку с помощью платежных систем (QIWI, Paypal, Яндекс.Деньги и т. д). Но недавно узнал, что гугл запрещает использовать платежные системы внутри приложения, кроме своей. Можно ли... http://www.cyberforum.ru/android-dev/thread1257074.html
Уведомления в строке состояния. Как сделать уведомление больше в высоту? Android
Что-то не выходит никак сделать уведомление больше 60dp в высоту. Делаю его через notif.conteView = inflater.infalte.... Как то же у Gmail и т.п. получаются большие уведомления.
Android Рандом конкретных чисел
Добры день, мне нужно сделать рандом чисел от 1 до 4 (int) и записать их в масив, пробовал сделать так : TextView Score ; int i=4, cer ; Score = (TextView) findViewById(R.id.score); cer = new int; for (i=4 ; i<=0 ; i--){ cer = (int)(Math.random()*4+1);
Android Как разделить экран OpenGL и объявление AdMob? http://www.cyberforum.ru/android-dev/thread1256958.html
Вот мой onCreate: @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN, WindowManager.LayoutParams.FLAG_FULLSCREEN); glView = new GLSurfaceView(this); glView.setRenderer(this);
Android C# and Android Здравствуйте. Появилась задача - разработать приложение на шарпе под андроид. Хотелось бы узнать опыт коллег, которые делали подобное. Какие средства разработки можно использовать? Подводные камни - приложение планируется собирать под винду и под андроид. Возможно ли такое? Буду признателен за любые советы. подробнее

Показать сообщение отдельно
cezer_ak
4 / 4 / 1
Регистрация: 14.02.2013
Сообщений: 232
16.09.2014, 17:00  [ТС]     Узнать завершил ли работу Activity (не AsyncTask)
Нет 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. Надеюсь ничего не упустил)))
 
Текущее время: 01:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru