Im новое в разработке Android, и я должен сделать приложение, которое проверяет приложение, работающее на переднем плане, и оно должно обновлять текстовое представление с именем приложений. На данный момент Im использует строку, поэтому я не могу ссылаться на не последнюю переменную из исполняемого внутреннего класса.textview сбрасывается каждый раз, когда я возвращаюсь к приложению
Я поместил свой код в класс Runnable в метод oncreate моей основной деятельности, не знаю, правильно ли это место, так как я хочу запустить его один раз, а затем пусть поток выполнит свою работу с бесконечный цикл.
Одна из нескольких проблем, которые я обнаружил, когда я запускаю свое приложение, каждый раз, когда я возвращаюсь к приложению, текстовое поле пуст, тогда поток начинает заполнять его своей строкой, но когда я покинул приложение и вернитесь снова, пусто.
Как я могу сохранить содержимое текста?
Я разместил здесь свой код, спасибо за помощь.
@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