什么是可以取代onReceive()的函数?

时间:2016-01-13 13:11:55

标签: android android-broadcast

我有一些代码;

public class MyAsyncTask extends AsyncTask.. {

 /*----- some code
  */
protected Void doInBackground(){

    process1;

    process2;

    ....

    process10;


      }
}

public void onReceive(Context context, Intent arg1) {

     if(action==abc){

           myAsyncTask=new MyAsyncTask();

           myAsyncTask.excute(context);

     }

 }

我在结果中看到了:有些时间" process10"没有实施。

据我所知:

  • onReceive()无法处理长作品,然后它可以随时杀死任何进程。
  • 避免在onReceive()中处理代码太长。
  • 在Receiver中没有处理异步回调等待...(如图所示Dialog,连接服务......)

所以,问题已经发生。但我还没有解决方法来修复它。

我希望得到所有人的帮助来解决我的问题

请帮帮我! 谢谢大家!

1 个答案:

答案 0 :(得分:1)

您可以使用IntentService:http://developer.android.com/reference/android/app/IntentService.html

package com.example.myapp;

public class MyIntentService extends IntentService {

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

    @Override
    protected void onHandleIntent(Intent intent) {
         process1;
         process2;

         ....

         process10;
    }
}

在您的清单中注册此服务:

<manifest ... >
    ...
    <application ... >
        <service android:name="com.example.myapp.MyIntentService" />
        ...
    </application>
</manifest>

最后在onReceive()方法中启动IntentService:

public void onReceive(Context context, Intent arg1) {
    if(action.equals(abc)){
       Intent intent = new Intent(context, MyIntentService.class)
       context.startService(intent)
    }
}