分类错误(11)

时间:2013-11-09 10:44:17

标签: android delphi firemonkey delphi-xe5

请按照以下步骤操作:

  1. 新建Firemonkey Moblie Application
  2. TGeustureManager组件添加到表单
  3. 将2 TButton个组件添加到表单

    • Button1.Text:“Button1:做点什么......”
    • Button2.Text:“Button2:退出应用程序......”

    The application should appear like this

  4. 双击Button2 Component并为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. 在设备上
  7. ,单击按钮2,然后单击是以弹出消息。将出现一个例外:

    enter image description here

  8. 为什么会引发此异常?

    我认为它与未使用的TGeustureManager组件有关。但不是

    1. 如果您打开Delphi xe5附带的Location演示项目。
    2. TButton组件添加到Location标签,如下图所示: enter image description here
    3. 将上述相同的代码添加到OnClick事件。
    4. 运行应用程序,然后单击Button5,您将获得相同的异常。
    5. 这是我应该报告的错误吗?或者我做错了什么?

5 个答案:

答案 0 :(得分:1)

在执行流程耗尽之前,您可能正在杀死正在运行的活动,从而导致问题。就像在表单方法中释放表单一样....

如果替换会发生什么:

SharedActivity.finish

使用:

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

[从记忆中输入,因此可能需要一些调整]

答案 1 :(得分:0)

如果您只想关闭应用程序,可以试试这个:

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;

答案 2 :(得分:0)

我已就此问题联系了Embarcadero。

他们说这是因为TApplication.Terminate尚未在FireMonkey移动平台中实现。

他们打开一张实施TApplication的门票。在nex hotfix中终止。

让我们希望不会花费很长时间。

答案 3 :(得分:0)

我在一个非常简单的位置测试应用程序上遇到了同样的错误,它在标签上设置文本时会发生。标签设置为自动尺寸,当我将其更改为静态尺寸时,错误就消失了。

Delphi XE6,FMX.TextLayout.GPU中的第681行

我正在使用三星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;

答案 4 :(得分:-4)

我刚刚经历过类似的事情,一个非常小的应用程序,每次我退出Android设备上的应用程序(我的情况下为Galaxy Note 2)时,只有很少的代码会给出同样的错误(Segmentation fault 11)。

为了它的价值,当我找到我之前在表格上填写的样式簿并清除它时,问题就消失了。我想我之前已经从另一个测试单元复制了这个Stylebook。

麦克