Servicio de Android para PubNub

He implementado PubNub suscribirse y publicar código. Mi código funciona bien en la actividad. Pero ahora quiero ejecutar ese código en segundo plano con la ayuda de clase de servicio. He creado mi clase extendiendo el IntentService . Y estoy suscribiendo al canal onCreate en el método onCreate . Pero cuando estoy ejecutando el servicio de aplicaciones se detiene inmediatamente sin mostrar el estado de pubnub. Estoy recibiendo el siguiente error de pubnub. He vinculado las bibliotecas necesarias pubnub también.

 04-09 23:39:32.621: D/Service Message(10033): error[Error: 100-1] : Timeout Occurred 

MainActivity.java

 public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void startService(View v){ startService(new Intent(this, MyService.class)); } public void stopService(View v){ stopService(new Intent(this, MyService.class)); } } 

PubnubHandler.java

 public class PubnubHandler{ public static final String GLOBAL_CHANNEL = "my_channel_name"; public static final String PUBLISH_KEY = "my_publish_key"; public static final String SUBSCRIBE_KEY = "my_subscribe_key"; private Context context; private Pubnub pubnub; public PubnubHandler(Context context) { this.context = context; pubnub = new Pubnub(PUBLISH_KEY, SUBSCRIBE_KEY); pubnub.setRetryInterval(1000); } public void notifyUser(String message) { final String msg = message; Handler handler = new Handler(Looper.getMainLooper()); handler.post(new Runnable() { @Override public void run() { Toast.makeText(context, msg, 0).show(); } }); } public void subscribe() { Callback callback = new Callback() { @Override public void connectCallback(String channel, Object message) { Log.d("Service Message", "Subscribed"); } @Override public void disconnectCallback(String channel, Object message) { Log.d("Service Message", "Disconnected"); } public void reconnectCallback(String channel, Object message) { Log.d("Service Message", "Reconnected"); } @Override public void successCallback(String channel, final Object message) { Log.d("Service Message", "Message : "+message.toString()); } @Override public void errorCallback(String channel, PubnubError error) { Log.d("Service Message", "error"+error.toString()); } }; try { pubnub.subscribe(GLOBAL_CHANNEL, callback); } catch (PubnubException e) { System.out.println(e.toString()); } } public void unsubscribe() { pubnub.unsubscribe(GLOBAL_CHANNEL); } public void publish(String message) { Callback callback = new Callback() { public void successCallback(String channel, Object response) { } public void errorCallback(String channel, PubnubError error) { notifyUser("Something went wrong. Try again."); } }; pubnub.publish(GLOBAL_CHANNEL, message , callback); } } 

MyService.java

 public class MyService extends IntentService { public MyService() { super("My Service"); // TODO Auto-generated constructor stub } @Override public void onCreate() { super.onCreate(); Toast.makeText(this, "Service Created", 1).show(); new PubnubHandler(this).subscribe(); } @Override public int onStartCommand(Intent intent, int flags, int startId) { return super.onStartCommand(intent, flags, startId); } @Override public void onDestroy() { super.onDestroy(); Toast.makeText(this, "Service Destroyed", 1).show(); } @Override protected void onHandleIntent(Intent arg0) { } } 

manifiesto

 <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.servicedemo" android:versionCode="1" android:versionName="1.0" > <uses-sdk android:minSdkVersion="16" android:targetSdkVersion="17" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <application android:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" > <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <service android:name=".MyService" > </service> </application> </manifest> 

Siempre debe hacer el trabajo en IntentService onHandleIntent() , no en onCreate() . La razón porque su IntentService detiene inmediatamente es que no ha proporcionado ningún código a onHandleIntent() . IntentService siempre se cierra cuando onHandleIntent() termina y no hubo ninguna otra llamada startService() .

En su caso, sin embargo, las llamadas a PubNub API son asíncronas y, por lo tanto, ya están en segundo plano. Tal vez usted no necesita IntentService aquí en absoluto. Si desea crear un objeto modelo para conservar los datos que sobrevivirán a los cambios de configuración de la actividad, considere el uso de Fragmento sin cabecera o Service simple.

Trate de extender MyService de Simple Service lugar de IntentService . IntentService llama a stopSelf() justo después de completar la última tarea. Esto significa que no habría ningún Context asociado con PubnubHandler y el sistema puede matar simplemente un Thread donde subscriben la materia está funcionando.

  • Cómo ocultar los productos inactivos en la facturación de aplicaciones?
  • La mejor manera de determinar automáticamente el idioma del usuario
  • Qué patrones de diseño debo aprender antes de iniciar Android Development
  • ¿Por qué se utiliza FrameLayout para fragmentos?
  • Reemplazar e incrementar el número en el nombre de archivo en una aplicación de Android
  • Error: Error de ejecución de la tarea ': app: dexDebug'. Com.android.ide.common.process.ProcessException
  • ¿Qué significa esta declaración de retorno de Java?
  • Cómo cambiar programatically Edittext Cursor Color en android?
  • Soporte de difusión celular en Android?
  • Android Espresso IdlingPolicies.setIdlingResourceTimeout no funciona
  • Solución de problemas de la función SeekTo de Android MediaPlayer
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.