Have you tried checking how many sessions there are compared to visits?
You can often find 1 visit has more than 1 session against it. Note, sessions are indicated by the 'Launches' metric. (You might also find 'Launch Number' and 'Visit Number' dimensions useful if drilling down to an individual visitor to investigate.)
A visit typically times out after 30 minutes of inactivity, whereas mobile 'sessions' are by default set to time out after 5 minutes.
This difference in timeouts can cause the significant difference in the session length and visit length metrics.
Here's my rough understanding.
Imagine these are the time stamps on individual hits of a visit
10:00 - opens app for first time
10:05 - puts app into background
10:25 - opens app again
10:26 - puts app into background
10:45 - opens app again
10:46 - puts app into background
There are 3 launches (sessions) here. 5 minutes, 1 minute and 1 minute. (7 minutes over 3 sessions = 2:20 average session length)
However, due to no 30 minute period without a hit, it is 1 visit and the visit length is 46 minutes. 46:00 average time per visit.
You'll need to create a 'time on page' metric to report on time spent on a page. Total seconds spent / (page views - single page visits)