当前位置: 首页 > 知识库问答 >
问题:

每次调用OnCreate时运行线程

乔宏峻
2023-03-14

我尝试在每次创建活动时运行以下线程。它第一次工作,但如果我按下后退按钮并尝试再次导航到活动,它总是崩溃第二次。我怎样才能确保这个线程每次都运行成功呢?

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();
    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;
}

共有1个答案

夹谷苗宣
2023-03-14

如果导航回已创建的活动,则不会调用onCreate。

尝试将代码移动到onResume()中:

@Override
protected void onResume(){
    super.onResume();
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();
}
 类似资料:
  • Firebase崩溃报告捕获的异常: 异常java.lang.运行时异常:无法启动活动ComponentInfo{com.talmir.mickinet/com.talmir.mickinet.activities.HomeActivity}:android.content.res.资源$NotFound异常:资源ID 0x7f080058android.app.ActivityThread.pe

  • 问题内容: 我以为这是一个简单的任务,但是我很惊讶没有找到答案。 让我澄清一下: 我不想手动打电话。实际上,我什至没有使用命令行来查看LogCat,所以我认为这是不可能的(编辑: 实际上,是通过在单独的命令行中运行命令来实现的,但是我没有想要这样做) 。我正在使用Eclipse查看LogCat。 我不想每次都单击按钮。那就是我现在正在做的。 我确实是 通过编程方式或通过Eclipse的“运行/调试

  • 我有以下ThreadPoolTaskExecator2配置 在我的公共类AdminService中,我有两个方法。 void triggerJob() 布尔执行sql(字符串sql) 如何将ThreadPoolTaskExecutor插入triggerJob方法,以便在第一个方法中调用executeSql时创建新线程。 在triggerjob中,我有一个基于条件调用executeSql的循环。 我

  • 我使用taskscheduleR来运行我的R代码。我必须运行一次的那个运行得很好,但是其他的(每小时、每周、每天等等)都不行。)工作,尽管其余报告“成功:已成功创建计划任务“test2” 这是我用来运行一次的代码(工作正常): 这是我用来运行WEEKLY的代码(不起作用): 在这种情况下没有生成日志,看起来任务从未计划过。 类似于每小时(不起作用):库(taskscheduleR)myscript

  • 本文向大家介绍ajax的定时调用每5秒调用一次,包括了ajax的定时调用每5秒调用一次的使用技巧和注意事项,需要的朋友参考一下

  • 问题内容: 我是Java新手。有人可以帮我为什么不调用Run方法。提前致谢。 问题答案: 您需要将的实例传递给构造函数,以告诉新线程运行什么: (这是不幸的是,类已经以各种方式被设计得不好。这将是更有益的,如果它 不 具有方法本身,但 没有 强迫你传递到构造函数,然后你会发现在编译的问题-时间。)