私はこのリンクのチュートリアルに従いました:https://github.com/PumpingCode/Xamarin-NavigationDrawerDemo。Xamarin NavigationDrawer slow
100%動作します。しかし、私が抱えている問題は、アプリケーションが起動後数分間は高速になるということですが、5分間のナビゲーションの後、アプリケーションは遅くなり始めます。引き出しが開くには3秒かかりますが、伸びが遅くなります。スイッチ、スクロールビューなどの他のコントロールにも影響します。非常にゆっくりと反応します。
考えられる原因をご存知ですか?この種の問題をどのように診断できますか?ここで
以下の私のコードです:
MainActivityフラグメントと呼ばれる
public class MainActivity : AppCompatActivity
{
WebView web_view;
MediaPlayer _player;
DrawerLayout drawerLayout;
protected override void OnCreate(Bundle bundle)
{
try
{
base.OnCreate(bundle);
// Set our view from the "main" layout resource
SetContentView(Resource.Layout.Main);
drawerLayout = FindViewById<DrawerLayout>(Resource.Id.drawer_layout);
// Init toolbar
var toolbar = FindViewById<Android.Support.V7.Widget.Toolbar>(Resource.Id.app_bar);
SetSupportActionBar(toolbar);
SupportActionBar.SetTitle(Resource.String.app_name);
SupportActionBar.SetDisplayHomeAsUpEnabled(true);
SupportActionBar.SetDisplayShowHomeEnabled(true);
// Attach item selected handler to navigation view
var navigationView = FindViewById<NavigationView>(Resource.Id.nav_view);
navigationView.NavigationItemSelected += NavigationView_NavigationItemSelected;
// Create ActionBarDrawerToggle button and add it to the toolbar
var drawerToggle = new ActionBarDrawerToggle(this, drawerLayout, toolbar, Resource.String.open_drawer, Resource.String.close_drawer);
drawerLayout.SetDrawerListener(drawerToggle);
drawerToggle.SyncState();
//load default home screen
var ft = FragmentManager.BeginTransaction();
ft.AddToBackStack(null);
ft.Add(Resource.Id.HomeFrameLayout, new Accounts());
ft.Commit();
if (ft != null)
ft.Dispose();
}
catch (Exception ex)
{
}
}
}
OnSelectItem
async void NavigationView_NavigationItemSelected(object sender, NavigationView.NavigationItemSelectedEventArgs e)
{
var ft = FragmentManager.BeginTransaction();
ft.AddToBackStack(null);
switch (e.MenuItem.ItemId)
{
case (Resource.Id.nav_incidents):
SupportActionBar.SetTitle(Resource.String.toolbar_Accounts);
ft.Add(Resource.Id.HomeFrameLayout, new Accounts());
break;
}
ft.Commit();
// Close drawer
drawerLayout.CloseDrawers();
if (ft != null)
ft.Dispose();
}
- 選択した項目から
public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
{
// Use this to return your custom view for this Fragment
View view = inflater.Inflate(Resource.Layout.Accounts, container, false); //specify the page you want to redirect to
SQLiteDatabase db = null;
MemberDetails objMember = null;
try
{
TextView tvAccountStatus = view.FindViewById<TextView>(Resource.Id.lblAccountStatus);
TextView tvDateJoined = view.FindViewById<TextView>(Resource.Id.lblDateJoined);
TextView tvAccountNo = view.FindViewById<TextView>(Resource.Id.lblAccountNumber);
objMember = LocalDB.GetProfileInfo();
tvDateJoined.Text = Convert.ToDateTime(objMember.AccountDateJoined).ToString("dd MMM yyyy");
tvAccountNo.Text = objMember.ImeiNo;
}
catch (Exception ex)
{
}
finally
{
Utilities.Dispose(db);
Utilities.Dispose(objMember);
}
return view;
}
。私は、Androidアプリのメモリリークを監視するツールを試してみます。 –