标签: android-intentservice

持续在后台运行服务

持续在后台运行服务.例如,必须启动服务,即使应用程序关闭,也会显示20秒的Toast消息.

public class AppService extends IntentService {

    public int onStartCommand(Intent intent, int flags, int startId) {
        return START_STICKY;
    }

    public AppService() {
        super("AppService");
    }

    @Override
    protected void onHandleIntent(Intent workIntent) {
        Toast.makeText(getApplicationContext(), "hai", Toast.LENGTH_SHORT).show();
        SystemClock.sleep(20000);
    }
}
Run Code Online (Sandbox Code Playgroud)

android android-intentservice

3
推荐指数
1
解决办法
1万
查看次数

多个Android IntentServices可以同时运行吗?

根据我的理解,一个人IntentService只能一次处理一个Intent,因为它共享一个工作线程来完成它的所有工作.但是如果IntentService我的应用程序中有多个s,它们可以并行运行,还是它们共享单个工作线程?

service android android-intent android-intentservice

2
推荐指数
1
解决办法
917
查看次数

Android Oreo服务限制会影响作业调度程序的intentservices吗?

随着Oreo中引入的新后台服务限制,我很难找到一个地方来澄清在后台运行应用程序时是否仍然可以从JobScheduler启动IntentServices。

我有一个基于地理围栏的非常重要的功能,该功能需要在篱笆断开后运行intentService。我花了很长时间设置它,以便在篱笆破损且应用程序处于“牛轧糖”的“打for”状态时排队等待工作。当重新打开网络连接窗口时,作业最终由操作系统运行时,我在intentService中一个接一个地剥离每个作业。从技术上来说,当应用程序不在前台时正在启动服务,或者由于使用JobScheduler而仍然允许这样做时,我现在可以不再执行此操作吗?

android android-intentservice android-jobscheduler android-8.0-oreo

2
推荐指数
1
解决办法
3801
查看次数

如何将捆绑商品转换为WorkManager数据

我尝试摆脱此处所述的IntentService处理时间由于Android O背景限制。但是我无法将带有push info作为参数的Bundle Extras 传递给from 。有什么办法可以将Bundle放入数据中吗?GCMWorkManagerBroadcastReceiverWorkManager

android google-cloud-messaging android-intentservice android-bundle android-workmanager

2
推荐指数
1
解决办法
932
查看次数

java.lang.IllegalStateException:不允许启动服务意图(来自 Activity onCreate)

I'm starting an IntentService from MainActivity:onCreate and I noticed this crash from the crash reporting only on Android Oreo above:

java.lang.IllegalStateException: Not allowed to start service Intent { cmp=com.company.mobile/com.company.mobile.gcm.RegistrationIntentService }: app is in background uid UidRecord{c96fbae u0a184 TPSL idle procs:1 seq(0,0,0)}
    at android.app.ContextImpl.startServiceCommon()(ContextImpl.java:1577)
    at android.app.ContextImpl.startService()(ContextImpl.java:1532)
    at android.content.ContextWrapper.startService()(ContextWrapper.java:664)
    at cs.a()(FirebaseUtility.java:42)
    at com.company.mobile.MainActivity.onCreate()(MainActivity.java:81)
    at android.app.Activity.performCreate()(Activity.java:7136)
    at android.app.Activity.performCreate()(Activity.java:7127)
    at android.app.Instrumentation.callActivityOnCreate()(Instrumentation.java:1271)
    at android.app.ActivityThread.performLaunchActivity()(ActivityThread.java:2893)
    at android.app.ActivityThread.handleLaunchActivity()(ActivityThread.java:3048)
    at android.app.servertransaction.LaunchActivityItem.execute()(LaunchActivityItem.java:78)
    at android.app.servertransaction.TransactionExecutor.executeCallbacks()(TransactionExecutor.java:108)
    at android.app.servertransaction.TransactionExecutor.execute()(TransactionExecutor.java:68)
    at android.app.ActivityThread$H.handleMessage()(ActivityThread.java:1808)
    at android.os.Handler.dispatchMessage()(Handler.java:106)
    at android.os.Looper.loop()(Looper.java:193)
    at android.app.ActivityThread.main()(ActivityThread.java:6669)
    at java.lang.reflect.Method.invoke()(Method.java:-2)
    at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run()(RuntimeInit.java:493)
    at …
Run Code Online (Sandbox Code Playgroud)

android illegalstateexception android-intentservice android-8.0-oreo

2
推荐指数
1
解决办法
3059
查看次数

java.util.ConcurrentModificationException -- 执行 IO 操作时的错误(不带列表)

好的。这是场景。我有一个用户填写的表单来创建一个 Match 对象。我使用 anIntentService将信息写入后台线程上的文件。如果在boolean中传递了“true”的intenta,则ScoreFile也写入了相应的 a 。GlobalMatch是一个单例对象这里是IntentService代码:

 public class WriteMatchService extends IntentService {

        private static final String EXTRA_SCORES_FILE = "scores_file";
        public static final String REFRESH_MATCH_LIST_INTENT_FILTER = "refresh_match_list";

        public static Intent getIntent(Context context, boolean writeScoresFile) {
            Intent intent = new Intent(context.getApplicationContext(),
                    WriteMatchService.class);
            intent.putExtra(EXTRA_SCORES_FILE, writeScoresFile);
            return intent;
        }

        public WriteMatchService() {
            super("WriteMatchService");
        }

        @Override
        protected void onHandleIntent(@Nullable Intent intent) {

            boolean writeScoresFile = false;

            if (intent != null) {
                if (intent.hasExtra(EXTRA_SCORES_FILE)) …
Run Code Online (Sandbox Code Playgroud)

java android concurrentmodification android-intentservice

2
推荐指数
1
解决办法
2552
查看次数

使用IntentService中的ContentProvider

我在使用IntentService的ContentProvider时遇到问题.

我计划在我的应用程序中使用IntentService在手机完成启动时重新安排一些警报,但首先我需要从ContentProvider中提取一些数据.根据这些 链接,我可以通过注册BroadcastReceiver并从那里启动IntentService来实现这一点.这就是我做的:

OnBootReceiver.java

public class OnBootReceiver extends BroadcastReceiver {

@Override
public void onReceive(Context context, Intent intent) {
    Intent scheduleServiceIntent = new Intent(context, ScheduleService.class);
    context.startService(scheduleServiceIntent);
}
Run Code Online (Sandbox Code Playgroud)

ScheduleService.java

public class ScheduleService extends IntentService implements Loader.OnLoadCompleteListener<Cursor> {

private AlarmManager alarmManager;

@Override
public void onCreate() {
    super.onCreate();

    alarmManager = (AlarmManager) this.getApplicationContext().getSystemService(Context.ALARM_SERVICE);

}

@Override
protected void onHandleIntent(Intent intent) {
    String[] projection = new String[] {
    Contract._ID,
            Contract.START_TIME,
    Contract.DATE,
            Contract.NAME,
            Contract.TYPE};

    mCursorLoader = new CursorLoader(this, MyContentProvider.MyURI,
            projection, selection, selectionArgs, SOME_ID);
    mCursorLoader.registerListener(ID, this);
    mCursorLoader.startLoading(); …
Run Code Online (Sandbox Code Playgroud)

android android-contentprovider android-broadcast android-intentservice

1
推荐指数
1
解决办法
870
查看次数

如何等待凌空响应完成它在intentservice内的工作?

使用intentservice获取7 Rss Feed链接的数据,并在后台使用"Google Volley"并使用ResultReceiver获取结果,但我无法配置如何等待凌空响应完成它的工作以触发标记ResultReceiver显示MainActivity中的数据

rss android intentservice android-volley android-intentservice

1
推荐指数
1
解决办法
1万
查看次数

意图服务在打瞌睡模式下不工作

我的一位同行开发人员编写了intent service一个 API 调用,然后休眠 2 分钟。醒来后,它再次发送。

下面是代码:

public class GpsTrackingService extends IntentService {

....

@Override
    protected void onHandleIntent(Intent intent) {
      do{
        try{
          //make API call here

           //then go to sleep for 2 mins
          TimeUnit.SECONDS.sleep(120);
       
        } catch(InterruptedException ex){
            ex.printStackTrace();
        }
      } while (preferences.shouldSendGps()); //till the user can send gps.

    }

....

}


Manifest

<service android:name=".commons.GpsTrackingService" />
Run Code Online (Sandbox Code Playgroud)

当手机处于活动状态时,这工作正常。但是,每当手机进入打瞌睡模式时,它都无法唤醒。

使用报警管理器会WAKE permission解决这个问题吗?

我刚刚获得了代码库,需要在今天内解决这个问题。如果有人可以提供帮助,那就太好了。

android android-intentservice android-6.0-marshmallow android-doze

1
推荐指数
1
解决办法
3213
查看次数

通知 Android:当应用程序打开时不显示通知?

我正在做一个项目,我使用带有wakefulBroadcastReceiver 的意图服务来安排警报和发送通知。到目前为止没有问题。但我希望当我打开我的应用程序时,它不再显示通知。请问这个问题有什么想法吗?

java android android-intentservice

1
推荐指数
1
解决办法
3499
查看次数

在Android O上使用JobScheduler启动服务

我正在尝试启动一个IntentService来注册Android O上的firebase云消息.

在Android O上,不允许"在不允许的情况下"启动Intent Service,并且每个人都告诉我使用JobService而不是如何使用它.

JobInfo.Builder应该有什么限制才能有"允许它的情况",我一直得到相同的IllegalStateException

这是我的JobService

@Override
public boolean onStartJob(JobParameters params) {
    Intent intent = new Intent(this, RegistrationIntentService.class);
    getApplicationContext().startService(intent);
    return false;
}

@Override
public boolean onStopJob(JobParameters params) {
    return false;
}

public static void scheduleJob(Context context) {
    ComponentName serviceComponent = new ComponentName(context, MyJobService.class);
    JobInfo.Builder builder = new JobInfo.Builder(MyJobService.JOB_ID, serviceComponent);
    builder.setMinimumLatency(1 * 1000); // wait at least
    JobScheduler jobScheduler = context.getSystemService(JobScheduler.class);
    if(jobScheduler != null) jobScheduler.schedule(builder.build());
}
Run Code Online (Sandbox Code Playgroud)

android firebase android-intentservice android-jobscheduler

0
推荐指数
1
解决办法
4069
查看次数

为什么我的Singleton是同步的,但是它被多次创建?

出于某种原因,我的单例存储库是从后台线程多次创建的,但是,synchronized应该有帮助.有人可以帮忙吗?如果需要,我将提供代码片段和github链接.

我的IntentService类:

  @Override
    protected void onHandleIntent(@Nullable Intent intent) {
        Log.d(MainActivity.TAG, "ArticleIntentService - onHandleIntent");


        LiveData<List<Article>> liveArticles = ArticleRepository.getInstance(getApplication())
                .loadFromNetwork(PAGE_NUMBER, PAGE_SIZE);
        PAGE_NUMBER++;
        liveArticles.observeForever(articles -> {
            Log.d(MainActivity.TAG, "onStartJob - onChanged!!!!!!");
//                liveArticles.removeObserver(this);
            NotificationUtils.showNotification(context, articles.get(0).getSectionName(), articles.get(0).getWebTitle());

        });

    }
Run Code Online (Sandbox Code Playgroud)

我的存储库:

public static ArticleRepository INSTANCE;

public static synchronized ArticleRepository getInstance(Application application){
    if(INSTANCE == null){
        Log.d(TAG, "ArticleRepository getInstance is NULL");
        return  new ArticleRepository(application);
    }

    return INSTANCE;
}

private ArticleRepository(Application application) {
    Log.d(TAG, "ArticleRepository constructor");
    mContext = application;
    mArticles = new MutableLiveData<>();
    ArticleRoomDatabase db = ArticleRoomDatabase.getInstance(application);
    mArticleDao = …
Run Code Online (Sandbox Code Playgroud)

java android kotlin android-intentservice android-livedata

0
推荐指数
1
解决办法
61
查看次数