全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:884
推到 Plurk!
推到 Facebook!

frame問題(create / free )...

答題得分者是:pcplayer99
firesu
中階會員


發表:26
回覆:28
積分:55
註冊:2004-12-27

發送簡訊給我
#1 引用回覆 回覆 發表時間:2018-05-21 16:40:46 IP:60.248.xxx.xxx 未訂閱
開發版本:XE7+ android SDK 22.3
在form 的輸入框隨便輸入,然後按 [frame1]
在frame上的輸入框隨便輸入,然後按 [button1]
重覆上面步驟幾次後,就會有記憶體 av xxxxxx的錯誤訊息...
是否是frame的create / 釋放 寫法有問題?

form程式碼

[code delphi]
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.StdCtrls,
FMX.Controls.Presentation, FMX.Edit, FMX.Ani, Unit3;

type
TForm1 = class(TForm)
Edit1: TEdit;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
f2: TFrame3;
{ Private declarations }
procedure Finish1(Sender: TObject);
public
{ Public declarations }
end;

var
Form1: TForm1;

implementation

{$R *.fmx}
{$R *.LgXhdpiPh.fmx ANDROID}

procedure TForm1.Button1Click(Sender: TObject);
begin
try
f2 := TFrame3.Create(nil);
f2.Parent := Self;
f2.Button1.OnClick := Finish1;
//f2.CancelButton.OnClick := CancelClick;
//f2.CancelButton.Visible := False;

f2.PosXAni.PropertyName := 'Position.Y';
f2.PosXAni.StartValue := Self.ClientHeight;
f2.PosXAni.StopValue := 0;//(Self.ClientHeight - f2.MainLayout.Height) / 2;
f2.PosXAni.Duration := 0.2;
f2.PosXAni.Inverse := False;
f2.PosXAni.Interpolation := TInterpolationType.Linear;
//f2.OkButton.Align := TAlignLayout.Center;
//form1.OnKeyUp := f2KeyUp;
f2.PosXAni.Enabled := True;
except
//
end;
end;

procedure TForm1.Finish1(Sender: TObject);
begin
f2.Parent := nil;
FreeAndNil(f2);
end;

[/code]

測試程式在會員求助程式上傳區
編輯記錄
firesu 重新編輯於 2018-05-21 16:44:10, 註解 無‧
GrandRURU
站務副站長


發表:240
回覆:1680
積分:1874
註冊:2005-06-21

發送簡訊給我
#2 引用回覆 回覆 發表時間:2018-05-21 18:15:59 IP:180.217.xxx.xxx 未訂閱
釋放應使用 DisposeOf,在 Android 的世界釋放只是標記回收記憶體,非真實釋放,短時間大量 Create 和 DisposeOf 會造成記憶體快速膨脹導致閃退,為了環保,請重複使用塑膠袋 (x)物件(o)
firesu
中階會員


發表:26
回覆:28
積分:55
註冊:2004-12-27

發送簡訊給我
#3 引用回覆 回覆 發表時間:2018-05-22 13:53:02 IP:60.248.xxx.xxx 未訂閱
釋放改用這段測試
f2.Parent := nil;
f2.DisposeOf;
f2 := nil;

android 4.4 (三星 Galaxy Tba4)上, 沒有記憶體的問題了
android7 (Mi 5s Plus)上, 有對frame裡的edit做一些輸入動作, 就很容易有記憶體的錯誤
不對frame裡的edit做輸入, 就不會有問題...

===================引 用 GrandRURU 文 章===================
釋放應使用 DisposeOf,在 Android 的世界釋放只是標記回收記憶體,非真實釋放,短時間大量 Create 和 DisposeOf 會造成記憶體快速膨脹導致閃退,為了環保,請重複使用塑膠袋 (x)物件(o)
pcplayer99
尊榮會員


發表:146
回覆:790
積分:632
註冊:2003-01-21

發送簡訊給我
#4 引用回覆 回覆 發表時間:2018-05-23 09:44:02 IP:119.137.xxx.xxx 未訂閱
我没仔细看你的代码,我理解你的代码是:

1. 在 Frame 上面有一个 Button;
2. 点这个 Button 释放这个 Frame;

如果是这样的话,可能会出错。不如改为隐藏这个 Frame。
firesu
中階會員


發表:26
回覆:28
積分:55
註冊:2004-12-27

發送簡訊給我
#5 引用回覆 回覆 發表時間:2018-05-24 11:51:40 IP:60.248.xxx.xxx 未訂閱
搞不懂..
abdroid 7 如果有對frame的edit做打字行為,
釋放frame時, 超容易有記憶體錯誤的訊息..

先暫時用隱藏.
===================引 用 pcplayer99 文 章===================
我没仔细看你的代码,我理解你的代码是:

1. 在 Frame 上面有一个 Button;
2. 点这个 Button 释放这个 Frame;

如果是这样的话,可能会出错。不如改为隐藏这个 Frame。
P.D.
版主


發表:603
回覆:4038
積分:3874
註冊:2006-10-31

發送簡訊給我
#6 引用回覆 回覆 發表時間:2018-05-24 15:15:22 IP:118.169.xxx.xxx 未訂閱
我提供自身的經驗
在 xe 設計使用 Frame 的時候, 不管是不是用預載或動態加入的方式, 一旦建立Frame, 就無法釋放, 我也曾有這種想法, 不論是用Free, Deposof, Destroy... 都會引發 Android 的錯誤(在 Android 5.0上), 原因呢我不知道, 只知道這樣做會錯, 所以只能隱藏, 要不然就是不要使用 Frame
===================引 用 firesu 文 章===================
搞不懂..
abdroid 7 如果有對frame的edit做打字行為,
釋放frame時, 超容易有記憶體錯誤的訊息..

系統時間:2024-11-23 17:35:00
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!