标签: android-intentservice

服务与IntentService

有人可以告诉我一个IntentService可以用a无法完成的事情的例子Service(反之亦然)吗?

我也相信IntentService在不同的线程中运行而Service不是.所以,据我所知,在自己的线程中启动服务就像开始一样IntentService.不是吗?

如果有人可以帮我解决我的两个问题,我将不胜感激.

multithreading android android-service android-intentservice

753
推荐指数
11
解决办法
29万
查看次数

IntentService和服务有什么区别?

你能帮我理解一下IntentServicea和a 之间的区别Service吗?

android android-service android-intentservice

124
推荐指数
6
解决办法
10万
查看次数

android设计注意事项:AsyncTask vs Service(IntentService?)

我正在设计一个Android应用程序,需要执行以下步骤:

  1. 用户按下按钮或以其他方式指示"同步数据".
  2. 同步过程将使用REST Web服务将数据移入和移出服务器.
  3. 数据将本地存储在sqlite数据库中.
  4. 同步过程应该向UI提供状态更新/消息
  5. 不应允许用户漫游到应用程序的其他部分,并在同步过程中执行更多工作.

同步过程第一次运行时,可能需要10-20分钟.在初始同步之后,将传输和存储的数据更少,我希望该过程需要1-2分钟或更短时间.

我一直在阅读有关Android的AsyncTask各种内容以及使用服务的各种示例...但我并不完全理解选择一种设计而不是另一种设计的设计考虑和权衡.我目前使用AsyncTask将我的演示项目删除.观看(大部分)开发Android REST客户端应用程序之后:http: //code.google.com/events/io/2010/sessions/developing-RESTful-android-apps.html#我对此处描述的设计模式感到困惑感觉过于复杂,也许是因为我只是"不明白".

我来自java,spring,web和桌面应用程序背景.对手持设备进行思考和设计对我来说是一个新手.(当屏幕布局发生变化时会发生什么?当我正在运行同步时手机响铃会发生什么?)如果初始同步IS将是一个如此长时间运行的过程,请退回2步,是否有更好的方法我要考虑问题 - >解决方案,用户体验,用户对手机上运行的应用程序的期望?

很想听听那些已经与这些问题搏斗的更有经验的Android开发者.

android background-process android-asynctask android-intentservice

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

Android RuntimeException:无法实例化服务

我想创建一个服务,它将在一个单独的线程上运行(而不是在UI线程上),所以我实现了一个将扩展IntentService的类.但我没有运气.这是代码.

public class MyService extends IntentService {

    public MyService(String name) {
        super(name);
        // TODO Auto-generated constructor stub
    }

    @Override
    public IBinder onBind(Intent arg0) {
        // TODO Auto-generated method stub
        return null;
    }

    @Override
    public void onCreate() {
        // TODO Auto-generated method stub
        super.onCreate();
        Log.e("Service Example", "Service Started.. ");
        // pushBackground();

    }

    @Override
    public void onDestroy() {
        // TODO Auto-generated method stub
        super.onDestroy();
        Log.e("Service Example", "Service Destroyed.. ");
    }

    @Override
    protected void onHandleIntent(Intent arg0) {
        // TODO Auto-generated method stub
        for …
Run Code Online (Sandbox Code Playgroud)

android android-service android-intentservice

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

IntentService的onHandleIntent(Intent)获取null参数

我正在使用IntentService为我在Android上的应用程序运行后台服务.奇怪的是,我收到很多崩溃报告,其中传递给onHandleIntent的意图为空.我甚至不确定这是怎么可能的,而且看起来非常奇怪.任何人都可以建议为什么会发生这种情况?

堆栈跟踪

java.lang.NullPointerException
    at com.example.MyService.onHandleIntent(MyService.java:466)
    at android.app.IntentService$ServiceHandler.handleMessage(IntentService.java:65)
    at android.os.Handler.dispatchMessage(Handler.java:102)
    at android.os.Looper.loop(Looper.java:136)
    at android.os.HandlerThread.run(HandlerThread.java:61)
Run Code Online (Sandbox Code Playgroud)

我的服务文件中的第466行,其中空指针异常:

465 protected void onHandleIntent(Intent intent) {
466                Bundle data = intent.getExtras();   
Run Code Online (Sandbox Code Playgroud)

该服务启动为:

serviceIntent = new Intent(this, MyService.class);
serviceIntent.putExtra("ip", ip);
serviceIntent.putExtra("port", port);
startService(serviceIntent);                         
Run Code Online (Sandbox Code Playgroud)

编辑:我现在意识到我可能会误用IntentServices.当我启动服务时,我从onHandleIntent()开始一些工作线程,即使在onHandleIntent()返回后也继续运行.并通过绑定到服务并调用成员函数/回调来与线程通信.我将研究使用更好的方法来为此目的使用服务,同时我仍然不明白传递的意图是如何为空.我只能怀疑Android系统自己使用null意图调用onHandleIntent,这似乎很奇怪.有人可以解释为什么android系统可能以这种方式调用它吗?

android android-intent android-service android-intentservice

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

Android IntentService无法实例化类; 没有空的构造函数

我有一个MainActivity类需要访问在线API(因此使用网络资源).这需要我在单独的文件中创建的后台线程HttpRequestService.java.

MainActivity.java:

public class MainActivity extends Activity {
    public static final String API_KEY = "KEYKEYKEYKEYKEY";
    public static final String CLIENT_ID = "IDIDIDIDIDIDID";
    private final String BROADCAST_ACTION = "com.example.BROADCAST";
    private final String EXTENDED_DATA_STATUS = "com.example.STATUS";
    static final String LOGCAT_TAG = "TAGTAGTAGTAGTAG";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }

    @Override
    protected void onResume() {
        super.onResume();

        String token = "TOKENTOKENTOKENTOKEN";
        String urlString = "https://www.example.com/api?key=" + API_KEY;

        // Create and start intent for HttpRequestService background thread.
        Intent httpRequestServiceIntent …
Run Code Online (Sandbox Code Playgroud)

android intentfilter broadcastreceiver android-intentservice

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

即使应用程序关闭,如何保持IntentService运行?

在我的Android应用程序中,我通过调用从Activity中启动IntentService

startService(new Intent(this, MyService.class));
Run Code Online (Sandbox Code Playgroud)

它就像一个魅力.我可以在Activies之间移动,按Home键切换到其他应用程序......它仍然有效.但是如果我从最近的屏幕上删除我的应用程序,我的服务就会停止.我怎么能避免这个?换句话说,即使我的应用程序已从最近的应用程序关闭,如何保持我的服务运行?

我的服务代码如下:

public class MyService extends IntentService {

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

@Override
protected void onHandleIntent(Intent intent) {
    //Here I run a loop which takes some time to finish
}

}
Run Code Online (Sandbox Code Playgroud)

android android-service intentservice android-intentservice

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

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, resultData);

      switch(resultCode){
        case RESULT_CODE_FOO:
          receivedFooResult(resultData.getString(FOO_RESULT));
        break;
      }
    }
  }
}

public class MyIntentService extends IntentService {

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

  @Override
  protected void onHandleIntent(Intent intent) { …
Run Code Online (Sandbox Code Playgroud)

android android-service intentservice android-intentservice

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

在IntentService和AsyncTask(Android)之间使用共享代码时,Realm`从错误的线程访问`错误

我有一些代码可以下载"当前"对象的JSON.但是,每当警报响起时(当应用程序没有运行任何UI时),以及应用程序运行时的AsyncTask,IntentService都需要调用相同的代码.

但是,我得到一个错误说Realm access from incorrect thread. Realm objects can only be accessed on the thread they were created.但是,我不明白这个堆栈跟踪是如何或为什么在另一个线程上.

我能够通过复制所有共享代码并将其直接粘贴到DownloadDealService的onHandleIntent方法中来消除错误,但它非常草率,我正在寻找一个不需要复制代码的更好的解决方案.

如何在不重复代码的情况下摆脱此错误?谢谢.

public class DownloadDealService extends IntentService
{
    ...
    @Override
    protected void onHandleIntent(Intent intent)
    {
        Current todaysCurrent = Utils.downloadTodaysCurrent(); //<--- included for background info
        String dateString = Utils.getMehHeadquartersDate(); //(omitted)
        Utils.onDownloadCurrentCompleteWithAlarm(todaysCurrent, dateString); //<------ calling this...
    }
}

public class Utils
{
    // ...other methods ommitted...

    //This method is not in the stack trace, but I included it for background …
Run Code Online (Sandbox Code Playgroud)

multithreading android realm android-asynctask android-intentservice

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

JobIntentService 和 IntentService 有什么区别?

我不明白这两个 API 之间有什么区别。我的意思是什么时候使用第一个。为什么有 JobIntentService ?提前致谢

java android background-process android-intentservice jobintentservice

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