This is the 11th day of my participation in the Gwen Challenge in November. Check out the details: The last Gwen Challenge in 2021
Obtaining memory Information
Memory acquisition mainly includes obtaining VM memory information, application memory information, and class object memory information.
Vm memory information and memory information of class objects can be obtained through VM_service, but cannot be obtained temporarily in release mode.
To obtain the overall memory information of the application, you need to call the plug-in using native methods.
Obtaining Exception Information
Classification of Flutter anomalies
The categories are as follows:
1. The App
A. The synchronization is abnormal
B. Asynchronous exceptions
2. The Framework is abnormal
3. Other exceptions
Abnormal APP
App exception is generally an exception that occurs in the code written by ourselves. If not handled, the following code will not be executed.
In general, synchronous exceptions can be caught by try-catch and asynchronous exceptions can be caught by Future catchError.
Flutter also provides a centralized way to manage App anomalies, the zone.runZoned method.
APP Exception catching
Using the zone.runZoned method, you can trap all APP exceptions by wrapping runApp
runZoned<Future<Null>>(() async {
runApp(MyApp());
}, onError: (error, stackTrace) async {
//Do sth for error
});
Copy the code
void main() { FlutterError.onError = (FlutterErrorDetails details) { //Do sth for error }; . }Copy the code
Fluttererror. onError = (FlutterErrorDetails details) Async {// Forward an exception to the Zone Zone.current.handleUncaughtError(details.exception, details.stack); };Copy the code
Isolate.current.addErrorListener(new RawReceivePort((dynamic pair) {
var isolateError = pair as List<dynamic>;
var _error = isolateError.first;
var _stackTrace = isolateError.last;
Zone.current.handleUncaughtError(_error, _stackTrace);
}).sendPort);
Copy the code
The current uncaught exceptions can be retrieved using the addErrorListener method of the ISOLATE. Similarly, we use the Zone’s handleUncaughtError method to transfer exceptions to the zone for centralized processing.
Other exception catching
In Dart language, all Dart codes run in some ISOLATE, which is an independent worker similar to threads but not sharing memory, and an independent Dart program execution environment. In fact, the default environment is a main ISOLATE. There is no more information about the use of THE ISOLATE than the fact that the ISOLATE provides a way to catch all uncaught exceptions in the current ISOLATE.
Other exceptions
The exception can be forwarded through the handleUncaughtError method provided by the Zone.
The above exception was processed in zone.runZoned.
Looking at the source code, we know to set the custom error handling callback by setting FlutterError. OnError
Framework Exception Catching
Generally, the code written by yourself causes the code inside the Flutter Framework to be abnormal. By default, the exception page will be displayed to display the exception information.