getActivity()在服务Android java中使用的其他方式

时间:2013-11-14 01:00:44

标签: java android service android-activity background-service

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);

现在我要拨打MyBackgroundServiceService中,扩展名为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()

有没有其他方法可以替换{{1}}来调用方法?

1 个答案:

答案 0 :(得分:2)

ServiceActivity的单独组件,因此您无法使用getActivity()获取对它的引用。服务旨在用于执行用户不可见的工作,包括(但不限于)与UI线程的单独线程上的后台工作。服务更加强大,可以更好地控制用户看不到的正在执行的工作。它们不需要运行Activity

AsyncTask是一种在UI线程的单独Activity上从内部Thread进行工作的简单方法。

基本上,您不希望或需要AsyncTask中的Service

相反,在您的Service中,您应该生成Thread,或使用IntentService来处理为您创建工作人员Thread。然后,当您完成后,通过启动或使用Activity

将意图发送回LocalBroadcast

或者,您可以将ServiceActivity绑定,并提供ServiceActivity可以通过IBinder直接相互调用的方法接口。这些被称为绑定服务,只要Activity存活,它们才会存活。

尝试IntentService

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

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