如何更改图像并在 5 秒后重新运行线程中的主要活动后不回到 android 中的基本布局

Posted

技术标签:

【中文标题】如何更改图像并在 5 秒后重新运行线程中的主要活动后不回到 android 中的基本布局【英文标题】:How do I change image and after rerunning the main activity in the thread after 5 sec not go back to the basic layout in android 【发布时间】:2016-06-29 23:40:51 【问题描述】:

所以我正在创建一个应用程序,从我的AsyncTask 中获取字符串,该字符串是我在MainActivity 类中创建的子类,以便获取从互联网接收到的变量。根据我得到的变量,我每 5 秒后相应地更改图像。现在任务成功了,但在活动刷新时,我不断获得我在activity_main.xml 中创建的默认布局,并再次更改为我想要的布局。 在下面发布我的代码。

Thread thread = new Thread()  //thread I am running every 5 secs
        @Override
        public void run() 
            try 
                synchronized (this) 
                    wait(5000);
                    syncapp sa = new syncapp(); //AsyncTask to get String from Internet
                    sa.execute();
                
             catch (InterruptedException e) 
                e.printStackTrace();
            
            Intent mainActivity = new Intent(getApplicationContext(), MainActivity.class); //Creating intent to restart the activity (Need a workaround if possible)
            startActivity(mainActivity);
        

        ;
    ;
    thread.start();




public void setImage(String str) //Function I will call to change Image
    
        vacancy =0;
        b = a.toCharArray();
        for (int i = 0; i < 6; i++)
            if (b[i] == '0')
                iv[i].setImageResource(R.drawable.img2);
                vacancy++;
            else if (b[i] == '1') 
                iv[i].setImageResource(R.drawable.img1);
            
        Log.i("abc ", a);
        tv.setText("InBackGround" + str);
    
protected void onSaveInstanceState(Bundle outState) 
    super.onSaveInstanceState(outState);
   /* for(int i =0;i<6;i++) 
        outState.putChar("imv"+(i+1), b[i]);
    */
    outState.putString("a",a); //Getting a from the internet (php file)
    Log.i("Saved State", "Activity A - Saving instance state");

    现在我想要的是,如果你有更好的方法来做这件事。例如。在股票市场应用程序中,价格不断变化。就像我希望我的图像根据我得到的数据而改变一样。 如果这是唯一的方法,那么如何保存所做的更改 (例如,在上面的代码中 setImageResource 到 img2)永久。 如果我可以使用其他 ImageView。

我已经使用了onSaveInstanceState,但是当我从互联网上获取值时,我不知道我无法使用它们。

【问题讨论】:

【参考方案1】:

首先.. 在使用 UI 元素(如视图、小部件)时,您会希望避免产生自己的线程,因为只能从创建它的线程中触摸视图。

其次..您还希望避免在工作线程中休眠 - 基本上只需使用 Handler 类(来自 android.os)并发布延迟的 Runnable,如下所示:https://***.com/a/20784353/2102748。当您的 Activity 停止时,请务必停止对该特定处理程序的所有工作,如下所示:https://***.com/a/3627399/2102748

第三 - 如果这是您唯一需要的,您或许应该立即(在同一个 AsyncTask 或线程上)加载照片,但请务必将“设置位图以查看”工作发布到您创建的处理程序。

希望这会有所帮助。

【讨论】:

以上是关于如何更改图像并在 5 秒后重新运行线程中的主要活动后不回到 android 中的基本布局的主要内容,如果未能解决你的问题,请参考以下文章

如何更新线程中的引用和活动?

如何根据Android应用程序中的日期更改主要活动中的图像

Android:暂时禁用活动中的方向更改

html 5秒后更改图像src

在空闲/不活动60秒后重定向用户?

可以在 Ionic 2 中的图像之间制作淡入淡出动画