如何检测函数是否已运行完成?

时间:2012-04-30 12:05:06

标签: android runnable

webservice.UpdateAllNews();

此功能正在将数据从在线数据库下载到本地数据库。

我想要的是我想在检测到功能已下载完成所有数据后启动下一个活动。

P / S数据很大

这是我目前的情况

webservice.UpdateAllNews();
                int secondsDelayed = 17;
                new Handler().postDelayed(new Runnable() {
                    public void run() {
                        startActivity(new Intent(Main_Launcher.this,
                                Main_AllLatestNews.class));
                        finish();
                    }
                }, secondsDelayed * 1000);

这是另一个类函数

public void UpdateAllNews() {
    try {
        List<List_CategoryNews> newsCat = dbhelper.getAllNewsCategories();
        for (List_CategoryNews nwCat : newsCat) {

            int CatNewsID = nwCat.getCatID();

            if (CatNewsID != 0) {
                dbhelper.DeleteNews(CatNewsID);
                GetNews(CatNewsID, datetemp1, datetemp2);

            }

            String log = " NewsCatID- " + nwCat.getCatID()
                    + " category Name- " + nwCat.getNewCatName();
            System.out.println(log);
        }
    } catch (Exception ex) {
        AlertDialog.Builder b = new AlertDialog.Builder(mContext);
        b.setMessage(ex.toString());
        b.show();
    }
}

这个是17秒后不断启动的,我希望自动启动活动在完成从在线数据库下载数据后,而不是延迟17秒。

有什么建议吗?

2 个答案:

答案 0 :(得分:1)

也许尝试使用AsyncTask:

private class YourTask extends AsyncTask<String, Void, String> 
{
    @Override
    protected String doInBackground(String... urls) 
    {
         webservice.UpdateAllNews();
    }

    @Override
    protected void onPostExecute(String result) 
    {
      startActivity(new Intent(Main_Launcher.this,Main_AllLatestNews.class));
      finish();
    }
}

以及如何运行它:

YourTask task = new YourTask();
task.execute("...");

答案 1 :(得分:0)

为什么不使用像Observer-Observable这样的简单客户端 - 服务器方法? 任务完成后,observable将调用观察者的更新功能,这将是您的主要活动。