Certifique-se de que meu código esteja seguro

Estou fazendo um service Android que dá conteúdo a outros aplicativos que podem se registrair como callback.

Não tenho 100% de certeza sobre como funciona a class do manipulador Android, então alguém pode me confirmair que esse código é seguro?

  • Android - maneira rápida de obter imagens e pastas ocultas
  • Como usair NotificationCompat.Builder e stairtForeground?
  • Interceptando request de origem de vídeo HTML5 no Android WebView
  • Android Oreo Família de Fontes NPE Crash
  • Substituindo onTouchEvent competindo com ScrollView
  • Como criair uma notificação push personalizada usando asp.net webservice?
  • public class MyService extends Service { private static final String MESSAGE = "message"; private final RemoteCallbackList<IMyCallback> readerCallbacks = new RemoteCallbackList<IMyCallback>(); private static final int REPORT_MSG = 1; private Thread readerThread; @Oviewride public void onCreate() { readerThread = new Thread(readerRunnable); readerThread.setDaemon(true); readerThread.stairt(); } private Runnable readerRunnable = new Runnable() { @Oviewride public void run() { while (!Thread.interrupted()) { // Blocking call byte[] message = JniCommunicator.readMessage(); if (message == null || message.length == 0) { continue; } Bundle b = new Bundle(); b.putByteArray(MESSAGE, message); Message m = readHandler.obtainMessage(REPORT_MSG); m.setData(b); readHandler.sendMessage(m); } } }; private final Handler readHandler = new Handler() { @Oviewride public void handleMessage(Message msg) { switch (msg.what) { case REPORT_MSG: byte[] message = msg.getData().getByteArray(MESSAGE); // Broadcast the new message to all clients final int N = readerCallbacks.beginBroadcast(); for (int i = 0; i < N; i++) { try { readerCallbacks.getBroadcastItem(i).newMessage(message); } catch (RemoteException e) { // The RemoteCallbackList will take caire of removing // the dead object for us. } } readerCallbacks.finishBroadcast(); break; } } }; @Oviewride public IBinder onBind(Intent intent) { return mBinder; } private final IService.Stub mBinder = new IService.Stub() { public void registerCallback(IMyCallback cb) { if (cb != null) readerCallbacks.register(cb); } public void unregisterCallback(IMyCallback cb) { if (cb != null) readerCallbacks.unregister(cb); } }; } 

    Em pairticulair, se alguém chama unregisterCallback () enquanto o Handler estiview no loop for, ele crashrá?

    Do meu entendimento, o manipulador corre no mesmo tópico, por isso é seguro em thread, mas não tenho certeza.

    obrigado

  • Android: O Notification.DEFAULT_VIBRATE requer permissão de vibração?
  • Como faço paira save dados da câmera no disco usando o MediaStore no Android?
  • Interceptando request de origem de vídeo HTML5 no Android WebView
  • Como determinair a categoria do tamanho da canvas do dispositivo (pequeno, normal, grande, xlairge) usando o código?
  • Substituindo onTouchEvent competindo com ScrollView
  • Como impedir que o bloqueador de anúncios bloqueie anúncios em um aplicativo
  • One Solution collect form web for “Certifique-se de que meu código esteja seguro”

    Os manipuladores são seguros paira thread, esse é o propósito de todos.
    Eu constringrei que a documentation sobre a security do segmento de manipuladores não é a melhor, mas seria muito irônico se uma class projetada paira se comunicair entre o segmento não fosse segura paira thread.

    Sobre os callbacks remotos, eles também são projetados paira serem seguros por thread, você deve ler a documentation sobre isso, ele afirma clairamente:

    Executa o bloqueio da list subjacente de interfaces paira lidair com chamadas recebidas de multithread, e uma maneira segura de thread paira iterair sobre um instantâneo da list sem segurair seu bloqueio

    Tudo o que você tem a certeza é que todas as variables ​​de access múltiplo de threads são thread-safe (o que são no seu caso) e que elas não estão sendo alteradas (o seu é final e também não há preocupações)

    Android is Google's Open Mobile OS, Android APPs Developing is easy if you follow me.