在Android开发中的新的和我必须做一个应用程序,检查在前台运行的应用程序,它应该更新与应用程序的名称的文本。在使用字符串的那一刻,因为我不能引用可运行内部类的非最终变量。textview重新设置每次我回到应用程序
我已将我的代码放入Runnable类中,放入我主要活动的oncreate方法中,不知道它是否是放置它的正确位置,因为我想运行一次,然后让该线程执行其工作一个无限循环。
我发现的几个问题之一是当我运行我的应用程序,每当我回到应用程序,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();
}
}
如果你的意思是“回来”,你只是暂停你的应用程序,然后你必须在onRestart我也想这样做的东西。但是,如果关闭应用程序,则可以将最后一个字符串存储在sharedPreferences – Opiatefuchs 2014-09-11 09:56:47