Android后台进程(服务)

时间:2011-04-26 07:41:59

标签: android service background-process

我希望有人对这个问题有所了解,因为它一直让我疯狂。

我有这个服务,我称之为IssueNotifier,它有一些方法:

public void onCreate()
{
    super.onCreate(); 
    startService();

    //initiate preferences to get values
    prefs = PreferenceManager.getDefaultSharedPreferences(getBaseContext());
    choice = Integer.valueOf(prefs.getString("bgProcessPref", "15"));
    delay = choice * minute;
    if (VIEWISSUES_ACTIVITY != null)  
        Log.d(getClass().getSimpleName(), "ServiceTest started");
}

public void onDestroy()
{
    super.onDestroy();
    stopService();
    if (VIEWISSUES_ACTIVITY != null)  
        Log.d(getClass().getSimpleName(), "ServiceTest stopped");
}

private void startService() 
{ 
    final Handler handler = new Handler();
    final Runnable runnable = new Runnable() 
    {
        public void run() 
        {
            if(VIEWISSUES_ACTIVITY.getNewIssues() > 0)
                VIEWISSUES_ACTIVITY.sendNotification();
        }
    };
    timer.scheduleAtFixedRate(new TimerTask() 
    { 
        public void run()
        { 
            handler.post(runnable);
            System.out.println(delay);
        } 

    }, delay, delay);
}

private void stopService()
{
    if(timer != null)
        timer.cancel();
}

VIEWISSUES_ACTIVITY是另一个将启动此服务的Activity,它的方法sendNotification()将通知用户新消息是否已到达:

    //just pass the reference to the service
    IssueNotifier.setMainActivity(this);

    //start the service
    startService(new Intent(this, IssueNotifier.class));

所有这些代码都运行良好,但我的问题是我不希望VIEWISSUES_ACTIVITY启动此服务,而是另一个Activity来执行此操作,当我尝试使用另一个活动启动服务时它不起作用因为sendNotification ()在VIEWISSUES_ACTIVITY活动中(它必须在那里)。那我怎么能实现我的目标呢?

2 个答案:

答案 0 :(得分:0)

尝试:

Context.startService()

答案 1 :(得分:0)

在Service中实现sendNotification()(我自己的方法)而不是Activity,这是实现它的方法。