2013-11-09 3 views
4

Пожалуйста, выполните следующие действия:ошибка сегментации класса (11)

  1. Создать новую Firemonkey Moblie Application
  2. Добавить TGeustureManager компонент в форме
  3. Добавить 2 TButton компоненты в форме

    • Button1.Text: «Button1: Сделайте что-нибудь ...»
    • Button2.Text: «Butt on2: Выход приложения ...»

    The application should appear like this

  4. Двойной щелчок по Button2 компонент и написать следующий код для OnClick Событие:

    procedure TForm1.Button2Click(Sender: TObject); 
    begin 
        if MessageDlg('Are you sure you want to Exit?', TMsgDlgType.mtWarning, 
          [TMsgDlgBtn.mbYes, TMsgDlgBtn.mbNo], 0) = mrYes then 
        SharedActivity.finish; 
    end; 
    
  5. Запуск приложения в режиме отладки.
  6. на устройстве, нажмите кнопку 2, затем нажмите «Да», чтобы выскочить. Исключение появится:

    enter image description here

Почему возникает это исключение?

Я думал, что это связано с неиспользованным компонентом TGeustureManager. но НЕТ это НЕ:

  1. Если открыть Location демонстрационный проект, который поставляется с Delphi xe5.
  2. Добавить TButton компонент в Location этикетки, как показано на изображении ниже: enter image description here
  3. Добавьте один и тот же код, как и выше, чтобы OnClick Event.
  4. Запустите приложение и нажмите кнопку Button5, вы получите то же исключение.

Это ошибка, о которой я должен сообщить? или я делаю что-то неправильно?

+0

У меня точно такое же исключение повсюду, не связанное с прекращением моего приложения. Грустный, я не могу найти много информации об этом. Это происходит только в Firemonkey, который не является Windows. Windows работает нормально, все остальные терпят неудачу. Некоторые из них я понял (например, мне нужно было использовать generics 'TList <>', а не старый 'TList'), но теперь библиотека' XSuperObject' делает это при разборе файла (который является правильно отформатированным JSON-файлом в правильное местоположение). –

ответ

1

Возможно, вы убиваете деятельность, которая работает, до того, как поток ее выполнения исчерпан, тем самым вызывая проблемы. Очень похоже на освобождение формы в форме метода ....

Что произойдет, если вы замените:

SharedActivity.finish

с:

uses 
    FMX.Helpers.Android; 
... 
CallOnUIThread(procedure begin SharedActivity.finish end); 

[Набрали из памяти, так что, возможно, потребуется перенастройка]

+0

Спасибо Блонгу за ваш ответ. Я не нашел документацию о CallOnUIThread. и код, который вы опубликовали, не работает. Можете ли вы подробнее рассказать о своем ответе? –

+0

Когда вы говорите «не работает», вы имеете в виду, что он не компилируется или не улучшает ситуацию во время выполнения? CallOnUIThread вы можете проверить синтаксис в модуле, имя которого приведено. Да, это не документировано. За исключением источника. Что я предполагаю, что у вас есть. – blong

+0

Но, думая об этом сейчас, возможно, запуск одного и того же вызова в другом потоке не улучшит ситуацию. Вы должны отложить вызов, так как Release делает в VCL. Я подумаю об этом больше. – blong

0

, если вы только хотите, чтобы закрыть приложение un может попробовать следующее:

case MessageDlg('Close Application?', System.UITypes.TMsgDlgType.mtInformation, 
    [ 
     System.UITypes.TMsgDlgBtn.mbYes, 
     System.UITypes.TMsgDlgBtn.mbNo 
    ], 0) of 
    { Detect which button was pushed and show a different message } 
    mrNo: 
     showmessage(''); 
    mrYes: 
     halt; 
    end; 
+1

Спасибо @ user193149, я ищу, чтобы узнать, почему это исключение поднято. В любом случае, делая свой путь, возникает одно и то же исключение. –

0

Я связался с Embarcadero по этой проблеме.

Они сказали, что это потому, что TApplication.Terminate еще не реализована на платформе FireMonkey для мобильных устройств.

Они открывают билет для реализации TApplication.Terminate в nex hot fix.

Будем надеяться, что это не займет много времени.

+0

Какой номер выпуска на Quality Central? – Ravaut123

+0

Номер дела: 00361951 –

-4

Я только что испытал нечто похожее, очень маленькое приложение с небольшим кодом, дающим эту же ошибку (ошибка сегментации 11) каждый раз, когда я ухожу из приложения на Android-устройстве (Galaxy Note 2 в моем случае).

Для чего это проблема, проблема исчезла, когда я пошел в Stylebook, который я ранее надел форму и очистил ее. Я думаю, что раньше я скопировал этот Stylebook из другого тестового модуля.

Майк

0

У меня такая же ошибка на очень простое Расположение тестового приложения, это происходит при установке текста на этикетке. Ярлык был установлен на автоматический размер, и когда я изменил его на статический размер, ошибка исчезла.

Delphi XE6, строка 681 в FMX.TextLayout.GPU

Я использую телефон Samsung S4.

procedure TForm_StayTogether.LocationSensor1LocationChanged(Sender: TObject; 
    const OldLocation, NewLocation: TLocationCoord2D); 
begin 
    DistLabel.Text:= FloatToStr(LocationSensor1.Distance); 
    AccLabel.Text:= FloatToStr(LocationSensor1.Accuracy); 
    LatLabel.Text:= FloatToStr(NewLocation.Latitude); 
    LonLabel.Text:= FloatToStr(NewLocation.Longitude); 
end; 
Смежные вопросы