Posted on Leave a comment

ContextWrapper ContextImpl getBaseContext

ActivityThread casts Application.getBaseContext() to ContextImpl

static ContextImpl getImpl(Context context) {
        Context nextContext;
        while ((context instanceof ContextWrapper) &&
                (nextContext=((ContextWrapper)context).getBaseContext()) != null) {
            context = nextContext;
        }
        return (ContextImpl)context;
    }

Potential crash when !(context instanceof Activity)

public static Activity unwrap(Context context) {
    while (!(context instanceof Activity)) {
        ContextWrapper wrapper = (ContextWrapper) context;
        context = wrapper.getBaseContext();
    }
    return context;
}
Posted on Leave a comment

Start and kill process in Delphi

var
  PrIn: TProcessInformation;
  StIn: TStartupInfo;
  Res: bool;
  ProcID, Process: Cardinal;

// start
begin
  GetStartupInfo(StIn);
  Res := CreateProcess(PChar('..\Project1.exe'),
    PChar('"command line params"'), nil, nil, False, CREATE_NEW_PROCESS_GROUP,
    nil, nil, StIn, PrIn);
  ProcID := PrIn.hProcess;
  Process := PrIn.dwProcessId;
end;

// kill
begin
  TerminateProcess(ProcId, 0);
end;