Programın kendini kapatması

FireMonkey ve Mobil uygulama (iOS, Android, Windows Phone) ile ilgili sorularınızı bu foruma sorabilirsiniz.
Cevapla
Kullanıcı avatarı
Dostk
Üye
Mesajlar: 144
Kayıt: 22 Ağu 2015 12:21

Programın kendini kapatması

Mesaj gönderen Dostk »

Selam;

Formda sadece adres belirlemek için Location Sensor kullanıyorum, LG G3 de test için program çalıştırdıktan çok kısa bir süre sonra kapanıyor, bunun sebebi neden olabilir...

Kod: Tümünü seç

procedure TForm1.KonumSensorLocationChanged(Sender: TObject;
  const OldLocation, NewLocation: TLocationCoord2D);
var
  LDecSeparator: String;
begin
  try
    LDecSeparator := FormatSettings.DecimalSeparator;
    FormatSettings.DecimalSeparator := '.';
    Label1.Text := Format('%2.6f', [NewLocation.Latitude]);
    Label2.Text := Format('%2.6f', [NewLocation.Longitude]);
    if Not Assigned(FGeocoder) then
    begin
      if Assigned(TGeocoder.Current) then
        FGeocoder := TGeocoder.Current.Create;
      if Assigned(FGeocoder) then
        FGeocoder.OnGeocodeReverse := AdresBilgisi;
    end;
    if Assigned(FGeocoder) And Not FGeocoder.Geocoding then
      FGeocoder.GeocodeReverse(NewLocation);
  finally
  end;
end;

Kod: Tümünü seç

procedure TForm1.AdresBilgisi(Const Address: TCivicAddress);
begin
  Label4.Text := Format('Şehir :%s', [Address.AdminArea]);
  Label5.Text := Format('Ülke kodu: %s', [Address.CountryCode]);
  Label6.Text := Format('Ülke :%s', [Address.CountryName]);
  Label7.Text := Format('No :%s', [Address.FeatureName]);
  Label8.Text := Format('Yöre :%s', [Address.Locality]);
  Label9.Text := Format('Posta kodu :%s', [Address.PostalCode]);
  Label10.Text := Format('Şehir :%s', [Address.SubAdminArea]);
  Label11.Text := Format('Mahele veya cadde :%s', [Address.SubLocality]);
  Label12.Text := Format('No :%s', [Address.SubThoroughfare]);
 Label13.Text := Format('Sokak :%s', [Address.Thoroughfare]);
end;
Kullanıcı avatarı
G.Arkas
Üye
Mesajlar: 829
Kayıt: 01 Eki 2007 07:16
Konum: İstanbul
İletişim:

Re: Programın kendini kapatması

Mesaj gönderen G.Arkas »

  • Sadece G3 cihazında mı kapanıyor?
    Başka cihaz ya da emulatörde denediniz mi?
    Çok kısa derken ne kadar bir süre?
    İşlem yapıyor mu yoksa direk kapanıyor mu?
G3 lerde 2GB ram var diye hatırlıyorum.

Olası sebepler;

Bellek yetmiyor
Android sürümü desteklemiyor.
Koddaki create edilen nesneleri iyi kontrol edin.

Kod: Tümünü seç

if Assigned(TGeocoder.Current) then
        FGeocoder := TGeocoder.Current.Create;
      if Assigned(FGeocoder) then
        FGeocoder.OnGeocodeReverse := AdresBilgisi;
zaten bir satır yukarıda create edilen bir nesneyi tekrar neden create ediyorsunuz? bu olayda (Locationchange) her değişimde yeni nesne türetip (Create) bir daha da kapatmıyorsunuz. (Free) bellek taşar bu şekilde. Kodun tamamını görebilirsem yardımcı olmaya çalışırım.

iyi çalışmalar.
Resim
Kullanıcı avatarı
mcuyan
Üye
Mesajlar: 28
Kayıt: 04 Eki 2010 10:47

Re: Programın kendini kapatması

Mesaj gönderen mcuyan »

MErhabalar.
Sorun şu olabilir: LocationSensor den data gelmeden o hayali data ile işlem yapmaya çalıştırıyorsunuzdur..

bu da hiç ile bir şeyi çarpmak gibi olur. Benimde başıma gelmişti. sorun bundan mış..
M.Cihan UYAN
SNC Tech&Soft
Kullanıcı avatarı
Ilgaz
Üye
Mesajlar: 16
Kayıt: 06 Eki 2016 10:34

Re: Programın kendini kapatması

Mesaj gönderen Ilgaz »

Merhaba,

Bazen OnChange, OnEditingDone, OnClick gibi ikincil bir olayı tetiklemesi olası olan işlemler için böyle hatalar oluşturabiliyor. Bunun için 2 çözüm var:

1) Yeni bir constructor oluşturun ve bazı işlemler arasını denetlemek için debug point yerleştirin. Hatanın hangi satırda meydana geldiğini bulur ve çözüm sağlarsınız.

Kod: Tümünü seç

constructor CreateForm(Owner:TComponent);
begin
inherited Create(Owner);
{ OnCreate'te yaptıklarınızı buraya yazın }
{ Debug için pointleri yerleştirin ve kontrol edin. }

Show;
end;

2) Bu bahsettiğim tarzda yazılan event kodlarınız için olayların başlangıcında, henüz nesneleri oluştururken önce nil olarak değer atayıp daha sonra metodlarınızı bağlayabilirsiniz. Kod ile açıklarsak:

Kod: Tümünü seç

{ önce nil yapıyoruz }
Self.OnChange := nil;

// diğer işlemleriniz...

{ metodu tekrar bağlıyoruz }
Self.OnChange := FormName.OnChange;

akkaya83
Üye
Mesajlar: 19
Kayıt: 01 Tem 2003 10:23
İletişim:

Re: Programın kendini kapatması

Mesaj gönderen akkaya83 »

Bu sorun sadece LG telefonla alakalı değil, bende Samsung s4 var onda da belli bir süre çalıştıktan sonra kendiliğinden uygulama kapanıyor malesef. Hata ürettiğini zannetmiyorum, çünkü programı tıklayıp durunca kapanmıyor.. Androidin güç ve sistem koruması galiba.. Ben de bir türlü aşamadım..
alpbarutcu
Üye
Mesajlar: 4
Kayıt: 04 Ara 2016 02:57

Re: Programın kendini kapatması

Mesaj gönderen alpbarutcu »

Ben de bu tarz bir problemle karşılaştım, birden fazla form varsa, formları ilk form create edildikten sonra timer yardımıyla ilk form açıldıktan sonra create etmeyi bir deneyin.
yani dpr dosyasındaki şu bölümü

Kod: Tümünü seç

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
    Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);
  Application.Run;
end.
şu şekilde değiştirip

Kod: Tümünü seç

{$R *.res}

begin
  Application.Initialize;
  Application.CreateForm(TForm1, Form1);
  // Application.CreateForm(TForm2, Form2);
  //Application.CreateForm(TForm3, Form3);
  //Application.CreateForm(TForm4, Form4);
 // Application.CreateForm(TForm5, Form5);
  Application.Run;
end.
ilk form açıldıktan 1 sn sonra

Kod: Tümünü seç

procedure TForm1.Timer2Timer(Sender: TObject);
begin
  timer2.enabled:=False;
  AniIndicator1.visible:= True;
  AniIndicator1.Enabled := True;
  Application.CreateForm(TForm2, Form2);
  Application.CreateForm(TForm3, Form3);
  Application.CreateForm(TForm4, Form4);
  Application.CreateForm(TForm5, Form5);

end;
bu şekilde yapıp bir deneyin bende işe yaradı. Şu an kafam biraz dolu umarım anlatabilmişimdir.
akkaya83
Üye
Mesajlar: 19
Kayıt: 01 Tem 2003 10:23
İletişim:

Re: Programın kendini kapatması

Mesaj gönderen akkaya83 »

Tek form var.. :N(
Cevapla