每次我回到应用程序时,textview都会重置

时间:2014-09-11 09:52:25

标签: android textview reset foreground

我是Android开发的新手,我必须做一个应用程序来检查在前台运行的应用程序,它应该使用应用程序的名称更新textview。目前我使用的是字符串,因为我无法从可运行的内部类中引用非最终变量。

我已将我的代码放入我的主要活动的oncreate方法的Runnable类中,不知道它是否适合放置它,因为我想运行一次,然后让线程完成他的工作无限循环。

我发现的几个问题之一就是当我运行我的应用程序时,每次我回到应用程序时,textview都是空的,然后线程开始用我的字符串填充它,但当我离开应用程序来再回来,是空的。

如何保留textview的内容?

我把我的代码放在这里,谢谢你的帮助。

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    if (!bExecuted)
    {
        bExecuted = true;

        setContentView(R.layout.activity_main);

        final TextView myText = (TextView) this.findViewById(R.id.my_view);
        final ActivityManager am = (ActivityManager) this.getSystemService(ACTIVITY_SERVICE);
        final PackageManager pm = this.getPackageManager();

        Runnable myRunnable = new Runnable() {
             @Override
             public void run() {

                 String foregroundTaskAppName = "";
                 String foregroundTaskAppNameOld = "";

                 while (true) 
                 {
                     try
                     {
                         Thread.sleep(500);
                        // The first in the list of RunningTasks is always the foreground task.
                        RunningTaskInfo foregroundTaskInfo = am.getRunningTasks(1).get(0);

                        String foregroundTaskPackageName = foregroundTaskInfo .topActivity.getPackageName();

                        PackageInfo foregroundAppPackageInfo;

                        foregroundAppPackageInfo = pm.getPackageInfo(foregroundTaskPackageName, 0);

                        foregroundTaskAppNameOld = foregroundTaskAppName;
                        foregroundTaskAppName = foregroundAppPackageInfo.applicationInfo.loadLabel(pm).toString();

                        if (!foregroundTaskAppNameOld.equals(foregroundTaskAppName))
                        {
                            myText.post(new Runnable() { 
                                @Override
                                public void run() {
                                    String textOld = (String)myText.getText();
                                    myText.setText(textOld + "hol\n");
                                }
                            });
                        }

                    } catch (NameNotFoundException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (InterruptedException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }
                  }
             }
        };

        Thread myThread = new Thread(myRunnable);
        myThread.start();
    }
}

2 个答案:

答案 0 :(得分:0)

您需要的是正确的生命周期管理,当Activity停止运行时,Activity会进入暂停状态,当您再次返回时,您需要的是活动重新创建。

由于你是Android的新手,而不是提供实现的代码,我建议你在Adnroid Developer中阅读它,这样你就可以了解更多,如果你甚至在阅读建议的链接之后都无法,请让我知道,我会帮助。

答案 1 :(得分:0)

更改TextView后,应用程序被杀后不会保存。 你需要的是使用Android的保存状态,或使用它:

save value:
sharedpreferences sp = getSharedPreferences("Name Your data Base", Context.MODE_PRIVATE);
sp.edit().putString("NameOfVar" , "value").commit();

load value: 
sharedpreferences sp = getSharedPreferences("Name Your data Base", Context.MODE_PRIVATE);
String loadedValue = sp.getString("NameOfVar" , "Default Value");
祝你好运!