Size: a a a

Android NDK (C++) — русскоговорящее сообщество

2020 April 29

MG

Matthew Good in Android NDK (C++) — русскоговорящее сообщество
as my current idea is to implement the interface as a callback API
источник

MG

Matthew Good in Android NDK (C++) — русскоговорящее сообщество
so that i dont need to convert my entire class to AIDL
источник

AT

Arkadi Tolkun in Android NDK (C++) — русскоговорящее сообщество
hehe it is not possible
источник

MG

Matthew Good in Android NDK (C++) — русскоговорящее сообщество
rip
источник

AT

Arkadi Tolkun in Android NDK (C++) — русскоговорящее сообщество
ofc if your class support Parcelable - you can return it from background service.
источник

AT

Arkadi Tolkun in Android NDK (C++) — русскоговорящее сообщество
But changing some value in this class will not cause chaning it in background service (if this what you expect it to do)
источник

MG

Matthew Good in Android NDK (C++) — русскоговорящее сообщество
Arkadi Tolkun
But changing some value in this class will not cause chaning it in background service (if this what you expect it to do)
but that can be done if changes are expected right?
источник

MG

Matthew Good in Android NDK (C++) — русскоговорящее сообщество
for example, if i frequently expect the number of sessions to change
источник

AT

Arkadi Tolkun in Android NDK (C++) — русскоговорящее сообщество
It will not change ofc. You will need to call getSessions again for that )
источник

MG

Matthew Good in Android NDK (C++) — русскоговорящее сообщество
for example
@Override
public void onSessionFinished(final TerminalSession finishedSession) {
   if (terminalController.mTermService.getSessions().isEmpty()) {
       terminalController.currentFontSize = -1;
       if (terminalController.mTermService.mWantsToStop) {
           // The service wants to stop as soon as possible.
           terminalController.activity.finish();
           return;
       }
       terminalController.mTermService.terminateService();
   } else {
       terminalController.switchToPreviousSession();
       terminalController.mTermService.removeSession(finishedSession);
   }
}
источник

AT

Arkadi Tolkun in Android NDK (C++) — русскоговорящее сообщество
usually you call something like onSessionsChanged at service side. So clients will know that they need to update data.
источник

MG

Matthew Good in Android NDK (C++) — русскоговорящее сообщество
ok
источник

MG

Matthew Good in Android NDK (C++) — русскоговорящее сообщество
ok, so assuming i do marshaling manually (which i assume is difficult)

how would i fix this error?

java.lang.ClassCastException: android.os.BinderProxy cannot be cast to alpine.term.TerminalService$LocalBinder

        // THIS PRODUCES A CAST EXCEPTION SINCE THIS SERVICE IS STARTED IN A DIFFERENT PROCESS
       // THIS IS REQUIRED TO SURVIVE AN APPLICATION CRASH
       TerminalService.LocalBinder x = (TerminalService.LocalBinder) boundService;
       terminalController.mTermService = x.service;

public class TerminalService extends Service implements SessionChangedCallback {
   private final IBinder mBinder = new LocalBinder();
   @Override
   public IBinder onBind(Intent intent) {
       return mBinder;
   }
   /**
    * This service is only bound from inside the same process and never uses IPC.
    */
   public class LocalBinder extends Binder {
       public final TerminalService service = TerminalService.this;
   }
}
источник

AT

Arkadi Tolkun in Android NDK (C++) — русскоговорящее сообщество
override fun onServiceConnected(componentName: ComponentName, iBinder: IBinder) {
       this.sender = IMapDownloadService.Stub.asInterface(iBinder)
источник

EB

Evgen Bodunov in Android NDK (C++) — русскоговорящее сообщество
Evgen Bodunov
Продолжаем конкурс с Guru Maps. Мы выпустили обновление 4.1.1, в нем обновили защиту и поправили ворох ошибок. Условия конкурса прежние, кто сможет заставить в приложении работать все платные функции без покупки и пришлет нам первым apk - получит ключ от pro версии и наши уважение и почет. 🙂
С версией 4.1.0 @Vologhat справился за пару часов играючись. Мы постарались, чтобы в этот раз все было поинтересней.
Пока никто не справился. Пусть будет время до понедельника.
источник

I

Ivansuper in Android NDK (C++) — русскоговорящее сообщество
Matthew Good
so that i dont need to convert my entire class to AIDL
AIDL works around serialization and is created mostly for interprocess comunication so it is not a simple shared ram region
источник

MG

Matthew Good in Android NDK (C++) — русскоговорящее сообщество
Ivansuper
AIDL works around serialization and is created mostly for interprocess comunication so it is not a simple shared ram region
how can i send an instance of this

    /** Callback to be invoked when a {@link TerminalSession} changes. */
   public interface SessionChangedCallback {
       void onTextChanged(TerminalSession changedSession);
       void onTitleChanged(TerminalSession changedSession);
       void onSessionFinished(TerminalSession finishedSession);
       void onClipboardText(TerminalSession session, String text);
       void onBell(TerminalSession session);
       void onColorsChanged(TerminalSession session);
   }
to a service via android.os.Message

as i am trying to migrate my service to IPC and i have

       terminalController.mTermService.mSessionChangeCallback = new TerminalSession.SessionChangedCallback() {
источник

I

Ivansuper in Android NDK (C++) — русскоговорящее сообщество
So even if you make your way into working aidl keep in mind that everything will be passed exclusively by value
источник

I

Ivansuper in Android NDK (C++) — русскоговорящее сообщество
Matthew Good
how can i send an instance of this

    /** Callback to be invoked when a {@link TerminalSession} changes. */
   public interface SessionChangedCallback {
       void onTextChanged(TerminalSession changedSession);
       void onTitleChanged(TerminalSession changedSession);
       void onSessionFinished(TerminalSession finishedSession);
       void onClipboardText(TerminalSession session, String text);
       void onBell(TerminalSession session);
       void onColorsChanged(TerminalSession session);
   }
to a service via android.os.Message

as i am trying to migrate my service to IPC and i have

       terminalController.mTermService.mSessionChangeCallback = new TerminalSession.SessionChangedCallback() {
You cant
источник

I

Ivansuper in Android NDK (C++) — русскоговорящее сообщество
You must implement some dataflow using java primitives and wrap endpoints of aidl so in higher level api is resembles callback via functions
источник