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

标签 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);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()来调用该方法?

最佳答案

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

AsyncTask 是一种在独立于 ThreadActivity内部进行工作的简单方法。用户界面线程。

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

相反,在您的Service中,您应该生成一个Thread,或者使用IntentService来处理创建一个工作线程Thread 给你。然后,当您完成后,通过启动 Activity 或使用 LocalBroadcast

将 Intent 发送回 Activity

或者,您可以将 Service 绑定(bind)到 Activity 并提供 ServiceActivity 可以使用的方法通过 IBinder 接口(interface)直接相互调用。这些称为绑定(bind)服务,并且只有在 Activity 处于 Activity 状态时才会处于 Activity 状态。

尝试 IntentService

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

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

关于java - getActivity() 在 Android java 服务中使用的其他方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19967570/

相关文章:

java - 如何在 Netbeans 8.2 中使用 XSD 1.1?

linux - 在 CentOS 上暗恋时如何自动重启服务?

java - 如何通过网络共享jboss

android - 跨进程共享状态变量

java - 在ejabberd中处理异步消息

java - 没有错误,但应显示订购的披萨类型和数量的部分代码无法正常工作

具有启动服务的 Android 进程重要性不是 IMPORTANCE_SERVICE

android - 相对布局 alignParentLeft 与 alignParentStart

java - 是否可以使用 JRE 作为标准 VM 来实例化 Java 编译器?

android - 如何解决 Google API 建议、程序类型已存在的问题?