I have an infinite loop in my IntentService to update my view every 30 seconds based on the input of the main action.
public class IntentServiceTest extends IntentService { String Tag = "IntentServiceTest"; String ACTION_RCV_MESSAGE = "com.jsouptest8.intent.action.MESSAGE"; public IntentServiceTest(){ super("IntentServiceTest"); Log.d(Tag, "IntentServiceTest constructor"); } @Override protected void onHandleIntent(Intent intent) { // TODO Auto-generated method stub Log.d(Tag, "in onHandleIntent"); String url = intent.getStringExtra("URL"); Document doc; int i=0; try{ while(true){ Log.d(Tag, "entered try block..."); Log.d(Tag, "url = "+url); doc = Jsoup.connect(url) .get(); Log.d(Tag, "past Jsoup.connect"); Element data = doc.select("table").get(1).attr("bgcolor", "#f4f36f"); Log.d(Tag, data.toString()); Log.d(Tag, data.text()); Log.d(Tag, "creating intent..."); Intent broadcastIntent = new Intent(); Log.d(Tag, "setting action..."); broadcastIntent.setAction(ACTION_RCV_MESSAGE); broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); broadcastIntent.putExtra("OUTPUT", data.toString()); Log.d(Tag, "sending broadcast: "+(i++)); sendBroadcast(broadcastIntent); Thread.sleep(30*1000); } } catch(StackOverflowError e){ Log.d(Tag, "in StackOverflowError block..."); Log.d(Tag, "creating intent..."); Intent broadcastIntent = new Intent(); Log.d(Tag, "setting action..."); broadcastIntent.setAction(ACTION_RCV_MESSAGE); broadcastIntent.addCategory(Intent.CATEGORY_DEFAULT); broadcastIntent.putExtra("OUTPUT", "η³»η΅±εΏη·δΈ, θ«η¨εΎε試"); Log.d(Tag, "sending broadcast..."); sendBroadcast(broadcastIntent); } catch(Exception e){ Log.d(Tag, "in catch Exception block..."); onHandleIntent(intent); } } }
The problem is that I am stuck in this loop. Even if I kill the main action and then return to it to introduce a new input, the IntentService still returns based on the old input.
I need to know how I can update myself from the URL every 30 seconds without getting stuck. Thanks!
Jason ching
source share