创建GUIless应用程序的最简洁方法是什么?

时间:2011-07-06 07:19:30

标签: android service

早上好。

我有一个关于如何在没有GUI的情况下创建应用程序的问题。它应该在用户按下图标时启动。阅读其他帖子,似乎这样做的自然方式就是服务。

由于应用程序没有GUI,因此添加任何Activity都没有意义。因此,服务必须解除绑定。因此,如果没有组件调用startService,并且没有外部组件发送意图,¿服务如何启动?

清单中是否有任何属性可以实现此目的?或者可以扩展应用程序并使用onCreate来启动服务?

感谢。

更新: - 如果没有Intent,就无法在同一个应用中启动服务。其他选项可能是自动启动或广播接收器,但这些不符合我的要求。 - 没有活动的测试应用程序,图标甚至没有显示在启动器中。不知道这个的原因,可能与没有发射器活动的清单有关。

2 个答案:

答案 0 :(得分:2)

Android启动器中显示的应用程序列表基本上是系统中具有LAUNCHER意图过滤器的所有活动的列表:

<intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
</intent-filter>

如果您将此意图过滤器放在<service>上,它将无效(刚刚尝试过)。因此,做你想做的事的唯一方法是通过Activity。我认为最干净的方式是这样的:

public void onCreate(Bundle savedInstanceState) {
    Intent service = new Intent(this, MyService.class);
    startService(service);
    Toast.makeText(this, "Service started.", Toast.LENGTH_SHORT).show();
    finish();
}

除了屏幕底部显示“服务已启动”的小消息外,用户不会看到任何内容。这将在几秒钟内自动消失。这是干净的用户友好。

答案 1 :(得分:0)

当有人拨打startService()或有人拨打bindService()时,服务就会启动。请注意,如果服务仅通过bindService()启动,则当Activity明确解除绑定或被销毁(并且它是唯一的绑定器)时,它将自动停止。

您可以在AndroidManifest.xml中声明BOOT_COMPLETED_ACTION广播接收器,并在系统启动时启动您的服务。但您的服务只会在下次设备重启时启动。没有活动的应用程序和Android 3.1中的此广播事件存在一些问题。可以找到更多信息here

通常,即使您的主要组件是服务,在您的应用程序中至少有一个活动也是很好的。此活动将在用户启动时启动该服务,并且还可能会暴露一些配置服务行为的能力。


启动服务的活动示例:

public class ServiceStarterActivity extends Activity
{       
    @Override
    public void onCreate(Bundle savedInstanceState) 
    {       
        super.onCreate(savedInstanceState);       

        startService(new Intent(this, ServiceA.class));
        finish();
    }    
}