2015-06-17 44 views
0

我有一个简单的Android应用程序。我通过使用JSOUP从网站获取HTML元素(wikipedia上的文章计数)。我收到文章按钮点击计数和RefreshBtn()展现在一个TextView tv1,如下图所示:Android定期检查网站更新(JSOUP)

public class MainActivity extends ActionBarActivity { 

    String URL = "https://en.wikipedia.org"; 
    Element article; 
    TextView tv1; 
    ProgressDialog mProgressDialog; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     tv1 = (TextView)findViewById(R.id.tv1); 
    } 

    private class FetchWebsiteData extends AsyncTask<Void, Void, Void> { 

     @Override 
     protected void onPreExecute() { 
      super.onPreExecute(); 
      mProgressDialog = new ProgressDialog(MainActivity.this); 
      mProgressDialog.setMessage("Loading..."); 
      mProgressDialog.setIndeterminate(false); 
      mProgressDialog.show(); 
     } 

     @Override 
     protected Void doInBackground(Void... params) { 
      try { 
       Document doc = Jsoup.connect(URL).userAgent("Mozilla").get(); 
       article = doc.select("div#articlecount > a").first(); 
      } catch (IOException e) { 
       e.printStackTrace(); 
      } 
      return null; 
     } 

     @Override 
     protected void onPostExecute(Void result) { 
      if(article == null) tv1.setText("null!"); 
      else tv1.setText(article.text() + " articles found!"); 
      mProgressDialog.dismiss(); 
     } 
    } 

    public void RefreshBtn(View v) { 
     new FetchWebsiteData().execute(); 
    } 
... 
} 

我想文章定期计算(例如每2小时)。那么,如果有变化,我可以创建推送通知。做这个的最好方式是什么?我需要一些建议。谢谢。

回答

0

最好的方法是使用内部报警管理器。

Alarm Manager Example

另一种方式是实现第二个主题:

new Thread(new Runnable() 
    @Override 
    public void run() 
    { 
    try 
    { 
     while(true) 
     { 
     Thread.sleep(100000); //milliseconds 
     // Do Something 
     } 
    } 
    catch (InterruptedException e) 
    { 
     e.printStackTrace(); 
    } 
    } 
}).start(); 
+1

你确定第二种方式(带螺纹)是周期性的?你不应该在里面加一个循环吗? – TDG

+0

你说的对!谢谢 –