在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()
有没有其他方法可以替换{{1}}来调用方法?
答案 0 :(得分:2)
Service
是Activity
的单独组件,因此您无法使用getActivity()
获取对它的引用。服务旨在用于执行用户不可见的工作,包括(但不限于)与UI线程的单独线程上的后台工作。服务更加强大,可以更好地控制用户看不到的正在执行的工作。它们不需要运行Activity
。
AsyncTask
是一种在UI线程的单独Activity
上从内部和Thread
进行工作的简单方法。
基本上,您不希望或需要AsyncTask
中的Service
。
相反,在您的Service
中,您应该生成Thread
,或使用IntentService
来处理为您创建工作人员Thread
。然后,当您完成后,通过启动或使用Activity
LocalBroadcast
或者,您可以将Service
与Activity
绑定,并提供Service
和Activity
可以通过IBinder
直接相互调用的方法接口。这些被称为绑定服务,只要Activity
存活,它们才会存活。
我认为您最好的选择是尝试学习如何使用IntentService
http://developer.android.com/reference/android/app/IntentService.html