我是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();
}
}
答案 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");
祝你好运!