Articles of intentservice

Android IntentService实例化错误

可能重复: Android RuntimeException:无法实例化服务 我正在使用IntentService下载我的数据。 我的IntentService类定义如下: public class DownloadService extends IntentService{ super(“DownloadService”); @Override protected void onHandleIntent(Intent intent) { //download tasks… } } AndroidManifest.xml中: .. .. .. LauncherActivity.java: @Override public void onCreate(Bundle savedInstanceState) { .. .. .. Intent dwnldService = new Intent(this, DownloadService.class); startService(dwnldService); } 但我仍然收到此错误: 08-13 08:57:09.416: E/AndroidRuntime(942): FATAL EXCEPTION: main 08-13 08:57:09.416: E/AndroidRuntime(942): java.lang.RuntimeException: Unable […]

如何强制停止Intent Service正在进行中?

我有一个意图服务,下载几千兆字节的video。 我有一个“停止”按钮,如果意外点击“开始”或其他什么,停止下载。 我知道这已被问过几次,但对我没有工作答案。 我试着调用stopService() ,不起作用。 那只是调用IntentService.OnDestroy() 。 我试图在onDestroy调用stopSelf() ,也不起作用。 我尝试过像标志一样的东西,但是onHandleIntent如果已经运行则不会被调用,它会等到当前工作完成然后执行。 即使这样做有用,我也必须有一个像巨型if语句那样糟糕的东西 我唯一的选择是将其重写为常规服务吗? //回答 public class SyncService extends IntentService { boolean isCanceled; @Override public int onStartCommand(Intent intent, int flags, int startId) { if (intent.hasExtra(“action”)) { // Set the canceling flag isCanceled= intent.getStringExtra(“action”).equals(“cancel”); } return super.onStartCommand(intent, flags, startId); } @Override protected void onHandleIntent(Intent intent) { // Clean […]

Robolectric和IntentServices

使用Robolectric,如何测试一个广播意图作为响应的IntentService? 假设以下课程: class MyService extends IntentService { @Override protected void onHandleIntent(Intent intent) { LocalBroadcastManager.getInstance(this).sendBroadcast(new Intent(“action”)); } } 在我的测试用例中,我试图做这样的事情: @RunWith(RobolectricTestRunner.class) public class MyServiceTest{ @Test public void testPurchaseHappyPath() throws Exception { Context context = new Activity(); // register broadcast receiver BroadcastReceiver br = new BroadcastReceiver() { @Override public void onReceive(Context context, Intent intent) { // test logic […]

Android如何在IntentService上排队多个意图

关于IntentService的使用我有点困惑。 文档说IntentService将发送给它的所有意图排队,并一次处理一个。 我看了一下IntentService的代码,我看到onStartCommand()接收到intent,调用onStart()将它作为消息发送到intents队列 我很确定我在文档中读到somwhere只有系统调用onStartCommand()一次,如果你发出两次startService() ,第二次调用不会导致调用onStartCommand() 。 我可能在这里错了,因为我一直在寻找这篇文档而我似乎无法find它。 这与先前的概念相矛盾,该概念说您可以通过onStartCommand()在IntentService中排队许多意图。 所以我在这里需要帮助,如何在IntentService上排队多个意图? 我只看到两个选项: 只需使用不同的意图调用每次startService() 直接调用onStart()或onStartCommand() (绕过startService() )

Android:当应用程序被杀时,保持服务运行

即使应用程序被杀,我也希望在后台运行IntentService 。 并且被“杀死”我的意思是按住主页按钮很长时间 – > 查看所有正在运行的应用程序 – >将我的应用程序放在一边 – > 应用程序被杀或按下后退按钮很长时间 – > 应用程序被杀 我的代码如下。 在我的MainActivity中: Intent intent = new Intent(this, MyService.class); this.startService(intent); 在我的MyService中: public class MyService extends IntentService { @Override protected void onHandleIntent(Intent intent) { System.out.println(“MyService started”); run(); } private void run() { while (true){ System.out.println(“MyService still running”); doSomething(); waitSomeTime(); } } } 我看到应用程序打开时服务正在运行。 […]

Android中的背景图片下载需要帮助吗?

我有一个图像视图,我写过刷卡,在刷卡的时候,图像从互联网上下载,所以我想我必须在刷卡之前在后台下载图像,因为我需要使用asynctask或Service或IntentService,所有这些都有助于下载和存储数据/数据/ mypackages,但仍然在我的情况下刷卡任何想法,也告诉我哪一个是最好的,是我正在以正确的方式调用 asynctask 2.服务 3.意图服务如下图所示, 我很困惑哪一个是正确的方法,因为我的问题仍未解决 这是asynctask代码示例代码段 public class Demo extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); new FirstTask().execute(); // calling Asynctask here } } 异步任务代码 private class FirstTask extends AsyncTask { private final ProgressDialog dialog = new ProgressDialog(Catalogue.this); int temp = 0; // can use UI thread here protected void […]

如何使用Notification.deleteIntent

我正试图检测我的通知何时被清除。 我的问题直接提到了这个答案 ,它概述了我想要做的事情。 这就是我实施这些行动的方式: // usual Notification initialization here notification.deleteIntent = PendingIntent.getService(context, 0, new Intent(context, CleanUpIntent.class), 0); notificationManager.notify(123, notification) 这是CleanUpIntent类: class CleanUpIntent extends IntentService { public CleanUpIntent() { super(“CleanUpIntent”); } @Override protected void onHandleIntent(Intent arg0) { // clean up code } } 之后,我只是像往常一样启动通知,但是当我去测试它时(按“清除所有通知”)没有任何反应。 我插入了一行代码,当IntentService启动时,它会向LogCat打印一些内容,但是没有任何代码运行过。 这是我假设使用Notification.deleteIntent的方式吗?

防止Android“进程坏”错误

这个过程是错误的错误似乎没有很好的记录,我只能find变通方法。 我对此错误的原因以及如何防止它发生感兴趣,而不是如何通过重新启动,重新启动应用程序等手动处理它。 我的特定应用程序使用AlarmManager启动IntentService,每30秒运行约10秒。 这是在创建应用程序时调用的: Intent serviceIntent = new Intent(appContext, MyService.class); serviceIntent.putExtra(“service_extra”, extra); launchService = PendingIntent.getService( appContext, LAUNCH_SERVICE_REQUEST_CODE, scanIntent, PendingIntent.FLAG_UPDATE_CURRENT ); alarmManager.setInexactRepeating( AlarmManager.RTC, System.currentTimeMillis() + interval, interval, launchService ); 这在大多数情况下按预期工作。 但是,有时候服务无法无限期启动,有时几小时无法启动。 每隔约30秒就会出现以下错误,因此我知道我的警报正在尝试按计划启动IntentService,但尝试失败并且进程是错误的错误。 Unable to launch app com.example.android/10024 for service Intent { cmp=com.example.android/.MyService (has extras) }: process is bad 只需重新打开应用即可解决此问题。 但我需要知道如何预防它! 此服务的目的是在活动停止或销毁时在后台运行,因此必须在没有任何用户交互或解决方法的情况下防止此错误。

Android Service扩展了ResultReceiver for IntentService,如何实现CREATOR?

我的应用程序依赖于在后台与外部硬件保持同步的Service 。 因为服务在主线程上运行,所以它使用IntentService异步执行任何繁重的工作。 以下是解释控制流的代码的最小化示例: public class MyService extends Service { private final Handler handler = new Handler(); void someMethodDoesCallBarAsynchronously(){ Intent i = new Intent(this, MyIntentService.class); i.putAction(ACTION_FOO); i.putExtra(EXTRA_RECEIVER, new MyResultReceiver(handler)); startService(toGetScannerStatus); } void receivedFooResult(String bar){ //… } public class MyResultReceiver extends ResultReceiver{ public MyResultReceiver(Handler handler){ super(handler); } @Override protected void onReceiveResult(int resultCode, Bundle resultData) { super.onReceiveResult(resultCode, […]

IntentService可以无限期运行吗?

根据我的理解,IntentService将在其当前请求完成时停止。 考虑下面的场景,我将每隔100ms触发一次对IntentSerivce的请求,该请求的处理时间将为90 ms。 因此,对于我的每个请求 – startSerivce调用,将调用服务,并在90ms后(一旦处理完成),将调用IntentServicee的onDestroy。 我想让这个IntentServicee运行直到我说停止。 那可能吗? 假设我将在我的服务中执行以下操作 配置它 发送一些请求 等待回应 阅读回复 广播到调用的活动 步骤1对于我的所有请求都是通用的,所以我认为我可以在最初启动一次服务时执行它们,然后根据请求在HandleIntent中执行3-6。