Note that there are some explanatory texts on larger screens.

plurals
  1. POAndroid - multithreading issues when changing activity
    text
    copied!<p>I have a main menu with an action bar. On create, I run a thread that hits my server for a current status. When Complete, the thread calls a handler which kicks off a constantly running thread that cycles through the items and uses another handler call to change the test in the actionbar. The problem is that when I change views, I either get <code>android.view.WindowLeaked</code> or <code>View not attached to window manager</code></p> <p>Here is some sample code</p> <pre><code>public class MainMenuActivity extends ProtectedWithActionBarActivity{ private int STATUS_COUNTER; private final int RESULT_STATUS_LOADED = 2000; private final int RESULT_SHOW_STATUS = 2001; private CurrentStatusModel currentStatus; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.mainmenu); ActionBar footerbar = (ActionBar)findViewById(R.id.footerbar); footerbar.setTitle("Currently connected to " + PreferencesHelper.getCurrentEnvironment().name()); STATUS_COUNTER = 0; statusLoadThread.start(); } Thread statusLoadThread = new Thread() { @Override public void run() { //set currentStatus with data from server } }; Thread statusDisplayThread = new Thread() { int sleep = 5000; boolean threadDone = false; public void done() { threadDone = true; } @Override public void run() { while(true) { //pick message to send to handler //increment STATUS_COUNTER or reset to 0 when out of bounds try { sleep(sleep); } catch (InterruptedException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } }; private Handler handler = new Handler() { @Override public void handleMessage(Message msg) { switch(msg.what) { case RESULT_STATUS_LOADED: statusDisplayThread.start(); break; case RESULT_SHOW_STATUS: ActionBar footerbar = (ActionBar)findViewById(R.id.footerbar); String message = ((Object[])msg.obj)[0].toString(); OnClickListener listener = (OnClickListener)((Object[])msg.obj)[1]; footerbar.setTitle(message); footerbar.setOnTitleClickListener(listener); break; case ActivityBase.RESULT_ERROR: break; } } }; } </code></pre> <p>I'm not sure if what I'm doing is just wrong or if there is something blatantly obvious that I am missing. What needs to happen is the threads need to stop any time I change screens. Should I use <code>Thread.interrupt();</code> before starting the next activity?</p>
 

Querying!

 
Guidance

SQuiL has stopped working due to an internal error.

If you are curious you may find further information in the browser console, which is accessible through the devtools (F12).

Reload