2

在我PollFragment.java能打电话的地方new PollTask((MainActivity)getActivity()).execute((Void)null);

而在我的PollTask.java

public PollTask(MainActivity activity){
        super(activity);
        TerminalCfg terminalCfg = Global.getTerminalCfg();
        terminalId = terminalCfg.getTerminalId();
        retailerAcc = terminalCfg.getRetailerAcc();
        internalId = APIUtil.getInternalId(activity);
        username = APIUtil.getUsername(activity);
    }

现在我想 用如下new PollTask((MainActivity)getActivity()).execute((Void)null);MyBackgroundService扩展来调用Service

public int onStartCommand(Intent intent, int flags, int startId) {
        Toast.makeText(this, "service starting", Toast.LENGTH_SHORT).show();
        new PollTask((MainActivity)getActivity()).execute((Void)null);
        // For each start request, send a message to start a job and deliver the
        // start ID so we know which request we're stopping when we finish the job
        Message msg = mServiceHandler.obtainMessage();
        msg.arg1 = startId;
        mServiceHandler.sendMessage(msg);

        // If we get killed, after returning from here, restart
        return START_STICKY;
    }

有没有其他方法可以代替getActivity()调用方法?

4

1 回答 1

2

AService是与 an 分开的组件Activity,因此您无法使用getActivity(). 服务设计用于执行用户不可见的工作,包括(但不限于)在与 UI 线程不同的线程上的后台工作。服务更加健壮,并且可以更好地控制正在执行的对用户不可见的工作。它们不需要Activity运行。

An是一种在独立于 UI 线程的内部AsyncTask进行工作的简单方法。ActivityThread

基本上,您不需要或不需要AsyncTaskin a Service

相反,在你的Service你应该要么产生一个Thread,要么使用IntentService它将Thread为你创建一个工人。然后当你完成后,Activity通过启动它或使用LocalBroadcast

或者,您可以将 a 绑定Service到 anActivity并提供Serviceand可以通过接口Activity直接相互调用的方法。IBinder这些被称为绑定服务,只有在存在时才会Activity存在。

尝试 IntentService

我认为你最好的选择是尝试学习如何使用IntentService

http://developer.android.com/reference/android/app/IntentService.html

于 2013-11-14T04:49:26.817 回答