在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