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

标签 java android android-intent android-asynctask imageview

因此,我正在创建一个应用程序,从我的 AsyncTask 中获取字符串,该字符串是我在 MainActivity 类中创建为子类的,以便获取我收到的变量来自网络。根据我得到的变量,我每 5 秒相应地更改图像。现在任务已成功,但在 Activity 刷新时,我不断获得在 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");
}
  1. 现在我想要的是如果你有更好的方法来做这件事。例如。在股票市场应用程序中,价格不断变化。就像我希望我的图像根据我获得的数据而改变一样。
  2. 如果这是唯一的方法,那么我如何保存所做的更改 (例如,如上面的代码中的 setImageResource 到 img2)永久。
  3. 如果我可以使用其他 ImageView。

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

最佳答案

因此,首先......在使用 View、Widget 等 UI 元素时,您会希望避免生成自己的线程,因为 View 只能从创建它的线程中进行触摸。

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

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

希望这有帮助。

关于java - 如何更改图像并在 5 秒后重新运行线程中的主要 Activity 后不返回到 android 中的基本布局,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35995930/

相关文章:

java - 如何正确地将一些java swing控件放在右上角?

java - AsyncTask 中的 ArrayAdapter 出错

android - 如何在android 2.2中发送消息?

Android "singleTask"Activity 创建 Activity 的新实例

java - 无法实现通知服务

java - 在 Java 中使用 stream.sorted() 进行排序

android - 需要获取运行时的属性

java - 显示新屏幕需要太多时间! (线程也许...?)

java - 泛型类型上限本身就是泛型

Android 使用其 URL 检查文件是否存在于远程服务器中