Приложение Android не отвечает при извлечении zip-файла - PullRequest
0 голосов
/ 07 января 2019

Я хочу извлечь большой zip-файл через приложение FMX для Android, но Android видит, что приложение не отвечает, и предлагает убить его.

Вот мой код:

procedure AddSoundRes(SfileN: string);
begin
  if trim(SfileN) = '' then ShowMessage('Please Select A File')
  else
    begin
      try
        FormMessage.Show;
        Application.ProcessMessages;
        Archive2 := TZipFile.Create;
        Archive2.Open(SfileN, zmRead);
        Archive2.ExtractZipFile(SfileN, soundpath);
        ShowMessage('Resource added successfully');
      finally
        Archive2.Free;
        FormMessage.Hide;
      end;
    end;
end;

Как это решить?

1 Ответ

0 голосов
/ 07 января 2019

Вам нужно сделать это в другой ветке. Вы не можете выполнить такую ​​длинную задачу и ожидать, что пользовательский интерфейс будет применим, когда все это будет сделано в одном потоке.

Вот пример, который я сделал для вас:

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.Controls.Presentation,
  FMX.StdCtrls, System.Zip;

type
  TForm1 = class(TForm)
    btn1: TButton;
    procedure btn1Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

type
  TExtractZip = class(TThread)
  private
    fZIP: string;
  protected
    procedure Execute; override;
  public
    constructor Create(const aZipFile: string);
  end;

var
  Form1: TForm1;

implementation

{$R *.fmx}

{ TExtractZip }

constructor TExtractZip.Create(const aZipFile: string);
begin
  inherited Create(True);
  FreeOnTerminate := True;
  fZIP := aZipFile;
end;

procedure TExtractZip.Execute;
begin
  if TZipFile.IsValid(fZIP) then
    TZipFile.ExtractZipFile(fZIP, '.\contents\');
end;

procedure TForm1.btn1Click(Sender: TObject);
var
  extractzip: TExtractZip;
begin
  extractzip := TExtractZip.Create('.\azipfile.zip');
  extractzip.Start;
end;

end.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...