앱이 실행 후 바로 수행해야 하는 초기화 작업을 FormCreate에서 하게되면 앱의 구동시간이 길어집니다.(FormShow 이벤트도 앱이 구동 중 발생됩니다.)


앱이 완전히 구동된 이후 초기화 작업을 실행하려면 아래와 같이 처리할 수 있습니다.

(interface uses 절에 FMX.Platform 추가)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
<p>unit Unit1;
 
interface
 
uses
  System.SysUtils, System.Types, System.UITypes, System.Classes, System.Variants,
  FMX.Types, FMX.Controls, FMX.Forms, FMX.Graphics, FMX.Dialogs, FMX.Platform;
 
type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);
  private
    { Private declarations }
    FInit: Boolean;
    procedure InitData;
 
    function HandleAppEvent(AAppEvent: TApplicationEvent;
      AContext: TObject): Boolean;
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.fmx}
 
procedure TForm1.FormCreate(Sender: TObject);
var
  EventService: IFMXApplicationEventService;
begin
  FInit := False;
  if TPlatformServices.Current.SupportsPlatformService(IFMXApplicationEventService, IInterface(EventService)) then
    EventService.SetApplicationEventHandler(HandleAppEvent)
  else
    InitData;
end;
 
function TForm1.HandleAppEvent(AAppEvent: TApplicationEvent;
  AContext: TObject): Boolean;
begin
  case AAppEvent of
    TApplicationEvent.FinishedLaunching,
    TApplicationEvent.BecameActive:
        InitData;
  end;
  Result := True;
end;
 
procedure TForm1.InitData;
begin
  if FInit then
    Exit;
 
  // 데이터 및 컨트롤 초기화
 
  FInit := True;
end;
 
end.</p>


참고로 FinishedLaunching 이벤트가 iOS에서 발생하지 않습니다. 그래서 iOS의 경우 BecameActive 이벤트를 이용해 초기화 진행했습니다.

BecameActive 이벤트는 앱 활성화 될 때 마다 발생하기 때문에 중복방지 코드(if FIni then Exit;)를 추가했습니다.

관련글


번호 제목 글쓴이 날짜 조회 수
공지 [DelphiCon 요약] 코드사이트 로깅 실전 활용 기법 (Real-world CodeSite Logging Techniques) 관리자 2021.01.19 21929
공지 [UX Summit 요약] 오른쪽 클릭은 옳다 (Right Click is Right) 관리자 2020.11.16 20548
공지 [10.4 시드니] What's NEW! 신기능 자세히 보기 관리자 2020.05.27 22578
공지 RAD스튜디오(델파이,C++빌더) - 고객 사례 목록 관리자 2018.10.23 28341
공지 [데브기어 컨설팅] 모바일 앱 & 업그레이드 마이그레이션 [1] 관리자 2017.02.06 29619
공지 [전체 목록] 이 달의 기술자료 & 기술레터 관리자 2017.02.06 24953
공지 RAD스튜디오(델파이, C++빌더) - 시작하기 [1] 관리자 2015.06.30 45910
공지 RAD스튜디오(델파이,C++빌더) - 모바일 앱 개발 사례 (2020년 11월 업데이트 됨) 험프리 2014.01.16 181509
106 TFrame의 생성 및 해제를 편하게 해주는 TFrame 관리 클래스입니다.. file 푸른솔 2017.12.15 1978
105 [개발자 Tip] 모바일 앱 개발 시 시간 낭비를 줄이는 Tip #1: 테스트하기 위해 기다리는 시간을 줄인다. 관리자 2016.12.26 950
104 [XE8] 모바일 튜토리얼 무료 다운로드(영문), 총 364페이지 관리자 2015.07.09 1605
103 [XE8] 스피드버튼의 이미지를 크게 표시할 수 있습니다. Humphery 2015.06.04 760
102 앱의 상태바(StatusBar) 제어하기(색상변경, 감추기, 투명하게) Humphery 2015.06.04 2452
101 파이어몽키에서 외부 라이브러리 연동하기(jar, so, a) [3] Humphery 2015.04.14 3653
100 [XE8] Android 단말기 연결안될때 SDK 확인 및 설치 Humphery 2015.04.11 1986
99 모바일 앱 라이프사이클 이벤트 처리하기 Humphery 2015.04.09 1600
» 모바일 앱 라이프 사이클 이벤트 처리하기(앱 완전 구동 후 실행하기) [1] Humphery 2015.04.09 968
97 [XE7] iOS 시뮬레이터 배포 시 'Please specify exact device preset UUID.' 오류 대응 Humphery 2015.02.26 1566
96 안드로이드 하드웨어 백버튼 제어하기 Humphery 2015.02.25 2559
95 파이어몽키 용 그리드 컴포넌트 안내 - FirePower Humphery 2015.02.23 1463
94 [Android] 폰번호 가져오기 [1] 타락천사 2014.09.05 38618
93 안드로이드 각종 설정값 제어 예제. c2design 2014.08.14 1965
92 Find the O/S Language Type c2design 2014.07.30 48325
91 QR 코드를 만들고 스캔(읽는) 방법 Humphery 2014.07.24 5329
90 GPS좌표 이용 날씨정보앱 런칭. file c2design 2014.07.15 2718
89 모바일 Bluetooth 연동 자료 Humphery 2014.06.24 7036
88 모바일(안드로이드, iOS) 연락처에 접근하는 방법 Humphery 2014.06.20 3444
87 사다리게임 소스와 함께 오픈(iOS, 구글 마켓 등록완료) [2] file c2design 2014.05.27 7032