在我的应用程序中,我有一项活动,我想从哪个服务开始服务可以帮助我吗?
答案 0 :(得分:52)
在您的代码中添加此内容
Intent serviceIntent = new Intent(this, ServiceName.class);
startService(serviceIntent);
别忘了在AndroidManifest.xml文件中添加服务标签
<service android:name="com.example.ServiceName"></service>
来自Android official documentation:
警告:服务在与应用程序相同的进程中运行 声明它,并在该应用程序的主线程中,通过 默认。因此,如果您的服务执行密集或阻止操作 当用户与同一应用程序中的活动进行交互时, 该服务将降低活动性能。为了避免影响 应用程序性能,你应该在里面启动一个新的线程 服务。
答案 1 :(得分:39)
应用程序可以借助Context。startService方法启动服务。如果尚未创建服务,该方法将调用服务的onCreate方法;否则将调用onStart方法。这是代码:
Intent serviceIntent = new Intent();
serviceIntent.setAction("com.testApp.service.MY_SERVICE");
startService(serviceIntent);
答案 2 :(得分:1)
API Demos有一些启动服务的例子。
答案 3 :(得分:1)
使用Context.startService()方法。
阅读this。
答案 4 :(得分:1)
首先从android Manifest.xml
文件创建服务(即从应用程序选项卡)并给它一些名称
关于某些事件的活动,如点击或触摸,以包含服务中的代码:
public void onClick(View v)
{
startService(new Intent(getApplicationContext(),Servicename.class));
}
如果要停止正在运行或已启动的服务,请包含以下代码:
public void onclick(View v)
{
stopService(new Intent(getApplicationContext,Servicename.class));
}
答案 5 :(得分:0)
如果您想启动服务并且应该在后台运行,请在相应的服务中使用START_STICKY。
您也可以在启动时启动服务,
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
创建接收器,
<receiver android:name=".auth.NotificationBroadcast" android:enabled="true" >
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
在Brodcast Receiver中添加,
@Override
public void onReceive(Context context, Intent intent) {
System.out.println("BroadcastReceiverBroadcast--------------------ReceiverBroadcastReceiverBroadcastReceiver----------------BroadcastReceiver");
if (intent != null) {
String action = intent.getAction();
switch (action) {
case Intent.ACTION_BOOT_COMPLETED:
System.out.println("Called on REBOOT");
// start a new service
startService(new Intent(getApplicationContext(),Servicename.class));
break;
default:
break;
}
}
}
您的服务就像,
答案 6 :(得分:0)
在科特林,您可以按照以下步骤从活动开始服务:
startService!!.setOnClickListener { startService() }
private fun startService(){
startService(Intent(this, HitroService::class.java))
}