2014-09-11 6 views
0

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(); 
    } 
} 
+0

Если вы имеете в виду «вернуться», что вы просто приостанавливаете свое приложение, тогда вы должны делать это тоже в onRestart, я думаю. Но если вы закрываете приложение, вы можете сохранить последнюю строку, например, в sharedPreferences – Opiatefuchs

ответ

0

Что вам нужно, это правильное управление жизненным циклом, активность переходит в состояние паузы, когда он перемещается из строя, то, что вам нужно, это деятельность отдыха, когда она возвращается снова.

Поскольку вы новичок в android, а не предоставляете реализованный код, я предлагаю вам прочитать об этом здесь, в Adnroid Developer таким образом, что вы узнаете больше, если вы не сможете даже после чтения предлагаемой ссылки, пусть я знаю, что помогу.

+0

, в которой говорится: «Чтобы система Android восстановила состояние просмотров в вашей деятельности, каждый вид должен иметь уникальный идентификатор, предоставленный андроидом : атрибут id ". Это означает, что если мой текст имеет идентификатор, я не должен ничего делать? Спасибо – takluiper

+0

Если у него есть идентификатор, андроид его восстановит. но для сохранения таких значений, как объект и другие обработанные данные, вам необходимо использовать APIS, такие как saveInstanceState и restoreInstanceState. – Techfist

+0

У меня есть одна проблема, onSaveInstanceState не вызывается, когда пользователь просто нажимает обратно на планшет. Какое событие я могу использовать & – takluiper

0

После изменения TextView он не сохраняется после того, как приложение будет убито. то, что вам нужно, чтобы использовать сохраненное состояние Андроида, или использовать эту:

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"); 

удачи!

+0

Невозможно найти метод putString в sharedpreferences. Спасибо за ответ – takluiper

+0

Извините, его sp.edit(). PutString ("NameOfVar", "value"). Commit(); – Fashizel