【问题标题】:Export the logs in xamarin Profiler导出 xamarin Profiler 中的日志
【发布时间】:2015-11-27 20:17:42
【问题描述】:

我必须使用 xamarin 分析器测试一个应用程序。在 xamarin 探查器中是否有导出日志的选项?并且可以过滤不需要的日志(系统日志)。以及如何计算从一个活动到另一个活动的应用程序响应时间?任何帮助表示赞赏?

【问题讨论】:

    标签: xamarin xamarin.android xamarin-studio


    【解决方案1】:

    我认为没有办法导出日志。

    关于从一个活动计数到另一个活动,请使用下面的 App 类来实现有用的方法来计算间隔,因为 2 个活动

    using System;
    using Android.App;
    using Android.Runtime;
    
    namespace Appname
    {
    [Application]
    public class App : Application
    {
        public App (IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer)
        {
        }
    
        public override void OnCreate ()
        {
            base.OnCreate ();
    
        }
    }
    }
    

    在第二个活动的调用和第二个活动开始后,用如下方式测量时间: 通话中:

    DateTime startTime = DateTime.UtcNow;
    

    第二个活动开始后:

    TimeSpan elapsedTime = DateTime.UtcNow - startTime; 
    

    【讨论】:

      【解决方案2】:

      在 xamarin profiler 中是否有导出日志的选项?

      您可以配置输出路径,然后按 CONTROL+S (Windows) 或 COMMAND+S (OSX) 保存快照。

      • Windows:工具->选项->将 *.mlpds 保存到...
      • OSX:首选项->常规->输出位置

      我一直难以从 Xamarin.Profiler 导出和重新加载快照;我不能保证它会按预期工作。

      如果您在查看 Xamarin.Profiler 应用程序日志,它们位于:

      • Windows:[用户路径]/AppData/Local/Xamarin/Log/Xamarin.Profiler
      • OSX:~/Library/Logs/Xamarin.Profiler/

      如何计算应用程序从一个活动到另一个活动的响应时间?

      您可以向应用程序注册IActivityLifecycleCallbacks 的实现来执行此操作。这是您可以从中构建的基本示例:

      [Application]
      public class MyApplication : Application
      {
          public MyApplication(IntPtr javaReference, JniHandleOwnership transfer) : base(javaReference, transfer) { 
          }
      
          public override void OnCreate ()
          {
              RegisterActivityLifecycleCallbacks(new LifecycleCallbacks());
              base.OnCreate ();
          }
      }
      
      public class LifecycleCallbacks : Java.Lang.Object, Android.App.Application.IActivityLifecycleCallbacks
      {
          Dictionary<Type, System.Diagnostics.Stopwatch> _lifeTimeTrackers = new Dictionary<Type, Stopwatch>();
      
          public void OnActivityCreated (Activity activity, Bundle savedInstanceState)
          {
              _lifeTimeTrackers [activity.GetType ()] = Stopwatch.StartNew ();
              Event (activity, "created");
          }
      
          public void OnActivityDestroyed (Activity activity)
          {
              Event (activity, "destroyed");
              _lifeTimeTrackers.Remove(activity.GetType());
          }
      
          public void OnActivityPaused (Activity activity)
          {
              Event (activity, "paused");
          }
      
          public void OnActivityResumed (Activity activity)
          {
              Event (activity, "resume");
          }
      
          public void OnActivitySaveInstanceState (Activity activity, Bundle outState)
          {
              Event (activity, "save_state");
          }
      
          public void OnActivityStarted (Activity activity)
          {
              Event (activity, "started");
          }
      
          public void OnActivityStopped (Activity activity)
          {
              Event (activity, "stopped");
          }
      
          void Event (Activity activity, string eventName)
          {
              var type = activity.GetType ();
              if (_lifeTimeTrackers.ContainsKey (type)) {
                  Console.WriteLine ("Lifecycle event " + eventName.ToUpper() + " for '" + type.Name + "' after " + _lifeTimeTrackers [type].ElapsedMilliseconds + "ms");
              }
          }
      }
      

      这会将日志转储到应用程序输出中,如下所示:

      Lifecycle event STOPPED for 'MainActivity' after 3789ms
      Lifecycle event DESTROYED for 'MainActivity' after 3789ms
      Lifecycle event PAUSED for 'SecondActivity' after 3121ms
      Lifecycle event CREATED for 'MainActivity' after 0ms
      Lifecycle event STARTED for 'MainActivity' after 7ms
      Lifecycle event RESUME for 'MainActivity' after 7ms
      Lifecycle event STOPPED for 'SecondActivity' after 3568ms
      Lifecycle event DESTROYED for 'SecondActivity' after 3568ms
      Lifecycle event PAUSED for 'MainActivity' after 5918ms
      Lifecycle event CREATED for 'SecondActivity' after 0ms
      Lifecycle event STARTED for 'SecondActivity' after 2ms
      Lifecycle event RESUME for 'SecondActivity' after 2ms
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-07-26
        • 2018-07-02
        • 2017-06-09
        • 2010-09-22
        • 1970-01-01
        • 2022-10-06
        • 2016-06-26
        • 2017-10-28
        相关资源
        最近更新 更多