Я пытаюсь запустить следующий поток каждый раз, когда моя активность создана. Он работает в первый раз, но если я нажму кнопку «Назад» и попытаюсь перейти к активности снова, он всегда сбрасывается во второй раз. Как я могу убедиться, что этот поток успешно запускается каждый раз?Выполнение потока каждый раз, когда OnCreate называется
new Thread(new Runnable() {
public void run() {
for (int i = 0; i < 5; i++) {
try {
URL url = new URL(priceRangeLargeImageString[i]);
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoInput(true);
connection.connect();
InputStream input = connection.getInputStream();
Bitmap bitmap = BitmapFactory.decodeStream(input);
largeImage.add(bitmap);
} catch (IOException e) {
e.printStackTrace();
Log.e("Exception", e.getLocalizedMessage());
}
}
latch.countDown();
}
}).start();
try {
latch.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
addtoView();
Мой поток заселение в ArrayList, который я помещаю в пользовательский адаптер здесь:
общественное мнение GetView (интермедиат положение, Вид convertView, ViewGroup родитель) {
if (convertView == null) {
convertView = inflater.inflate(R.layout.forlist, parent, false);
}
// parent.setDescendantFocusability(ViewGroup.FOCUS_BLOCK_DESCENDANTS);
TextView address = (TextView) convertView.findViewById(R.id.Address);
address.setText(flowername.get(position));
TextView price = (TextView) convertView.findViewById(R.id.price);
price.setText("$" + flowerprice.get(position), TextView.BufferType.SPANNABLE);
Spannable spannable = (Spannable) price.getText();
spannable.setSpan(STRIKE_THROUGH_SPAN, 0, price.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
TextView discount = (TextView) convertView.findViewById(R.id.discountPrice);
discountedPrice = Double.parseDouble(flowerprice.get(position))/1.15;
String priceString = new DecimalFormat("$##.00").format(discountedPrice);
discount.setText(priceString);
TextView size = (TextView) convertView.findViewById(R.id.sizes);
size.setText(flowersize.get(position));
final ImageView image = (ImageView) convertView.findViewById(R.id.flowerImage);
image.setImageBitmap(flowerimage.get(position));
return convertView;
}
Мой LogCat заключается в следующем:
03-09 21: 33: 01.540 18890-18890/com.example.andrewberkowitz.bae W/dalvikvm: threadid = 1: поток, выходящий с неперехваченным исключением (группа = 0x41862da0) 03-09 21: 33: 01.550 18890-18890/com.example.andrewberkowitz.bae E/AndroidRuntime: FATAL EXCEPTION: main Процесс: com.example.andrewberkowitz.bae, PID: 18890 java.lang.IndexOutOfBoundsException: Недействительный index 0, размер 0 at java.util.ArrayList.throwIndexOutOfBoundsException (ArrayList.java:255) at java.util.ArrayList.get (ArrayList.java:308) at com.example.andrewberkowitz.bae.FlowerShopAdapter. getView (FlowerShopAdapter.java:106) на android.widget.AbsListView.obtainView (AbsListView.java:2780) на android.widget.ListView.measureHeightOfChildren (ListView.java:1274) на android.widget.ListView.onMeasure (ListView.java:1186) на android.view.View.measure (Просмотреть .java: 17594) на android.widget.RelativeLayout.measureChildHorizontal (RelativeLayout.java:719) на android.widget.RelativeLayout.onMeasure (RelativeLayout.java:455) на android.view.View.measure (View.java : 17594) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5398) на android.widget.FrameLayout.onMeasure (FrameLayout.java:310) на android.view.View.measure (View.java:17594) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5398) в android.support.v7.internal.widget.ActionBarOverlayLayout.onMeasure (ActionBarOverlayLayout.java:453) в android.view.View.measure (Просмотреть .java: 17594) at android.view.ViewGroup.measureChildWith Поля (ViewGroup.java:5398) на android.widget.FrameLayout.onMeasure (FrameLayout.java:310) на android.view.View.measure (View.java:17594) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5398) на android.widget.LinearLayout.measureChildBeforeLayout (LinearLayout.java:1410) в android.widget.LinearLayout.measureVertical (LinearLayout.java:695) в android.widget.LinearLayout.onMeasure (LinearLayout. java: 588) на android.view.View.measure (View.java:17594) на android.view.ViewGroup.measureChildWithMargins (ViewGroup.java:5398) на android.widget.FrameLayout.onMeasure (FrameLayout.java: 310) на com.android.internal.policy.impl.PhoneWindow $ D ecorView.onMeasure (PhoneWindow.java:2588) на android.view.View.measure (View.java:17594) на android.view.ViewRootImpl.performMeasure (ViewRootImpl.java:2308) на android.view.ViewRootImpl. measureHierarchy (ViewRootImpl.java:1409) на android.view.ViewRootImpl.performTraversals (ViewRootImpl.java:1610) на android.view.ViewRootImpl.doTraversal (ViewRootImpl.java:1267) на android.view.ViewRootImpl $ TraversalRunnable.run (ViewRootImpl.java:6638) на android.view.Choreographer $ CallbackRecord.run (Хореограф.java:813) на android.view.Choreographer.doCallbacks (Хореограф.java:613) на android. view.Choreographer.doFrame (Хореограф.java:583) на android.view.Choreographer $ FrameDisplayEventReceiver.run (Хореограф.ява: 799) на android.os.Handler.handleCallback (Handler.java:733) на android. os.Handler.dispatchMessage (Handler.java:95) на android.os.Looper.loop (Looper.java:146) на android.app.ActivityThread.main (ActivityThread.java:5635) на java.lang. отражать. Метод.invokeNative (родной метод) по адресу java.lang.reflect.Method.invoke (M ethod.java:515) at com.android.internal.os.ZygoteInit $ MethodAndArgsCaller.run (ZygoteInit.java:1291) at com.android.internal.os.ZygoteInit.main (ZygoteInit.java:1107) at dalvik.system.NativeStart.main (родной метод) 03-09 21: 33: 01.830 18890-19449/com.example.andrewberkowitz.bae D/dalvikvm: GC_FOR_ALLOC освобожден 792K, 31% бесплатно 19230K/27848K, приостановлено на 25 мс, всего 25 мс 03-09 21: 33: 02.201 18890-19449/com.example.andrewberkowitz.bae D/dalvikvm: GC_FOR_ALLOC освобожден 83K, 25% бесплатно 21018K/27848K, приостановлено 26 мс, всего 26 мс 03-09 21: 33: 02.381 18890-19449/com.example.andrewberkowitz.bae D/dalvikvm: GC_FOR_ALLOC освобожден 30K, 22% бесплатно 21923K/27848K, приостановлено 22 мс, всего 22 мс
Что такое 'latch'? – oltman
Если largeImage является массивом или HashMap, вам необходимо синхронизировать с ним доступ, чтобы несколько потоков не могли одновременно вызвать функцию add(). – lamflam
защелка гарантирует, что мой метод addtoView() не будет вызываться до тех пор, пока не будет выполнен протектор. – Andrew