Skip to content

[Android Crash] Touch data should have been recorded on start #5246

Closed

Description

@Richard-Cao

Paltform: Android
Version: 5.0

If you open Touch gestures feature on your device, when three fingers on the screen at the same time, crash.

There is crash stack:

device-2016-01-11-150743

I test this on react-native showcase Movie Trailers by MovieLaLa Android, crash still exist.

Activity

  1. Richard-Cao commented on Jan 11, 2016

    @Richard-Cao
    Author
  2. facebook-github-bot commented on Jan 11, 2016

    @facebook-github-bot
    Contributor

    Hey Richard-Cao, thanks for reporting this issue!

    React Native, as you've probably heard, is getting really popular and truth is we're getting a bit overwhelmed by the activity surrounding it. There are just too many issues for us to manage properly.

    • If you don't know how to do something or something is not working as you expect but not sure it's a bug, please ask on StackOverflow with the tag react-native or for more real time interactions, ask on Discord in the #react-native channel.
    • If this is a feature request or a bug that you would like to be fixed, please report it on Product Pains. It has a ranking feature that lets us focus on the most important issues the community is experiencing.
    • We welcome clear issues and PRs that are ready for in-depth discussion. Please provide screenshots where appropriate and always mention the version of React Native you're using. Thank you for your contributions!
  3. satya164 commented on Jan 19, 2016

    @satya164
    Contributor

    Sorry. I've no context on this. What do you mean by the touch gestures feature? How to enable it?

  4. Richard-Cao commented on Jan 20, 2016

    @Richard-Cao
    Author

    @satya164 Some Android devices like XiaoMi, Huawei, Nubia and so on, have touch gestures feature.
    If you open it, you can restore this crash.

  5. marcshilling commented on Feb 19, 2016

    @marcshilling

    I just got this on iOS as well. It seems to happen when I try to scroll my ListView quickly after it mounts...

  6. brianreavis commented on Feb 23, 2016

    @brianreavis

    Also got this on iOS when randomly tapping around on an app. Can't reproduce reliably ... so, sorry for there not being any more context. I don't think it was in the context of a ListView.

  7. marcshilling commented on Mar 16, 2016

    @marcshilling

    Found where this is happening: react/lib/ResponderTouchHistoryStore.js in the method recordMoveTouchData.

    On a cold boot of my app, if the first touch on the screen is a scroll on a ListView/ScrollView, there appears to be a race condition and recordMoveTouchData is called before recordStartTouchData, therefore touchHistory.touchBank is not properly initialized.

    Upon the first call,
    var touchTrack = touchBank[touch.identifier];
    touchTrack is undefined, causing the crash. Inserting:

      if (touchTrack) {
        reinitializeTouchTrack(touchTrack, touch);
      } else {
        touchBank[touch.identifier] = initializeTouchData(touch);
      }

    (like it exists in recordStartTouchData) resolves the problem. However, I doubt this is the correct solution. Again, I believe it's a race condition with the recordStartTouchData.

  8. marcshilling commented on Mar 16, 2016

    @marcshilling

    Opened an issue on react core here react/react#6277

  9. marcshilling commented on Mar 17, 2016

    @marcshilling

    Ok, they bounced it back over here. Anyone familiar enough with PanResponder to look further into this?

  10. skevy commented on Mar 17, 2016

    @skevy
    Contributor

    @majak I know you recently refactored how touches work (by passing them through the event dispatcher)...would you have any clue on this issue?

    TLDR; we're getting touchesMoved before a touchesStart is ever sent.

  11. skevy commented on Mar 17, 2016

    @skevy
    Contributor
  12. marcshilling commented on Mar 17, 2016

    @marcshilling

    Yep, you can see here iOS gets touchesBegan, then a series of touchesMoved, yet the first event to land in JS is a topTouchMove

    This is on React Native 0.20

    2016-03-17 10:31:17.463 DiscoveryVR - Dev[3700:1038410] touchesBegan event = <UITouchesEvent: 0x147ef85c0> timestamp: 164352 touches: {(
        <UITouch: 0x147fdc900> phase: Began tap count: 1 window: <UIWindow: 0x149037540; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x149060430>; layer = <UIWindowLayer: 0x14903df70>> view: <RCTView: 0x14932baf0; reactTag: 189; frame = (0 0; 341 153); alpha = 0.4; layer = <CALayer: 0x149321ad0>> location in window: {219, 587.5} previous location in window: {219, 587.5} location in view: {203, 29.5} previous location in view: {203, 29.5}
    )}
    2016-03-17 10:31:17.476 DiscoveryVR - Dev[3700:1038410] touchesMoved event = <UITouchesEvent: 0x147ef85c0> timestamp: 164352 touches: {(
        <UITouch: 0x147fdc900> phase: Moved tap count: 1 window: <UIWindow: 0x149037540; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x149060430>; layer = <UIWindowLayer: 0x14903df70>> view: <RCTView: 0x14932baf0; reactTag: 189; frame = (0 0; 341 153); alpha = 0.4; layer = <CALayer: 0x149321ad0>> location in window: {219, 540.5} previous location in window: {219, 587.5} location in view: {203, -17.5} previous location in view: {203, 29.5}
    )}
    2016-03-17 10:31:17.492 DiscoveryVR - Dev[3700:1038410] touchesMoved event = <UITouchesEvent: 0x147ef85c0> timestamp: 164352 touches: {(
        <UITouch: 0x147fdc900> phase: Moved tap count: 1 window: <UIWindow: 0x149037540; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x149060430>; layer = <UIWindowLayer: 0x14903df70>> view: (null) location in window: {219, 471} previous location in window: {219, 540.5} location in view: {219, 471} previous location in view: {219, 540.5}
    )}
    2016-03-17 10:31:17.511 DiscoveryVR - Dev[3700:1038410] touchesMoved event = <UITouchesEvent: 0x147ef85c0> timestamp: 164352 touches: {(
        <UITouch: 0x147fdc900> phase: Moved tap count: 1 window: <UIWindow: 0x149037540; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x149060430>; layer = <UIWindowLayer: 0x14903df70>> view: (null) location in window: {219, 357.5} previous location in window: {219, 471} location in view: {219, 357.5} previous location in view: {219, 471}
    )}
    2016-03-17 10:31:17.526 DiscoveryVR - Dev[3700:1038410] touchesMoved event = <UITouchesEvent: 0x147ef85c0> timestamp: 164352 touches: {(
        <UITouch: 0x147fdc900> phase: Moved tap count: 1 window: <UIWindow: 0x149037540; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x149060430>; layer = <UIWindowLayer: 0x14903df70>> view: (null) location in window: {227.5, 230} previous location in window: {219, 357.5} location in view: {227.5, 230} previous location in view: {219, 357.5}
    )}
    2016-03-17 10:31:17.539 [info][tid:com.facebook.React.JavaScript] 'eventTopLevelType = ', 'topTouchMove'
    2016-03-17 10:31:17.544 DiscoveryVR - Dev[3700:1038410] touchesMoved event = <UITouchesEvent: 0x147ef85c0> timestamp: 164352 touches: {(
        <UITouch: 0x147fdc900> phase: Moved tap count: 1 window: <UIWindow: 0x149037540; frame = (0 0; 375 667); autoresize = W+H; gestureRecognizers = <NSArray: 0x149060430>; layer = <UIWindowLayer: 0x14903df70>> view: (null) location in window: {253, 95.5} previous location in window: {227.5, 230} location in view: {253, 95.5} previous location in view: {227.5, 230}
    )}
    2016-03-17 10:31:17.546 [info][tid:com.facebook.React.JavaScript] 'touches = ', [ { target: 189,
        pageY: 540.5,
        locationX: 203,
        locationY: -17.5,
        identifier: 1,
        pageX: 219,
        timestamp: 164351752.6978334 } ]
    2016-03-17 10:31:17.547 [info][tid:com.facebook.React.JavaScript] 'changedIndices = ', [ 0 ]
    2016-03-17 10:31:17.548 [info][tid:com.facebook.React.JavaScript] ====================================
    2016-03-17 10:31:17.550 [error][tid:com.facebook.React.JavaScript] Touch data should have been recorded on start
    
  13. majak commented on Mar 17, 2016

    @majak
    Contributor

    I've changed how touches are handled only on iOS side. If this issue is common for both iOS and Android I would expect something is wrong on js side.
    @marcshilling can you repro this with a simple app containing just scrollview?
    @Richard-Cao could you link to a page on this device specific touch gestures feature on Android?

  14. marcshilling commented on Mar 17, 2016

    @marcshilling

    @majak I'll try to throw something together. The tricky thing is it's not reproducible 100% of the time (definitely a race condition). But anyway, yeah let me see if I can get something up and running.

  15. 5 remaining items

  16. Richard-Cao commented on Mar 21, 2016

    @Richard-Cao
    Author
  17. keeth commented on Mar 24, 2016

    @keeth

    Seeing similar crash reports in the wild on iOS as well. Thanks for looking into it!

  18. ghost added a commit that references this issue on Apr 1, 2016
  19. majak commented on Apr 1, 2016

    @majak
    Contributor

    Changes that should fix this issue were just pushed on master. Commits from 8f07b01 to 31bb85a. The important one with deeper explanation is 1d3db4c.
    Since I didn't repro this issue locally I cannot guarantee it will fix it for real. Therefore it would be great if you could patch it locally and see whether it really helps.

    But also turn off chrome debugging please. Looks like this stack breaks it 😅. I'm looking into that too.

  20. majak commented on Apr 6, 2016

    @majak
    Contributor

    Version 0.24.0-rc1 should already contain the fix and all necessary fixes for the fix.

  21. ide commented on Apr 6, 2016

    @ide
    Contributor

    To be clear, we believe the issue on iOS has been fixed. Those commits don't affect Android.

  22. added a commit that references this issue on Jun 18, 2016
  23. lacker commented on Oct 20, 2016

    @lacker
    Contributor

    Does anyone know whether this is still an issue on Android? It seems like we at least half fixed this type of problem, but since it has been a while it does not seem clear to me whether there is still a problem on Android here..

  24. johnwayner commented on Nov 17, 2016

    @johnwayner

    FWIW, I just saw this in Production on Android v6.0.1 with React Native v0.25.1 (which was tagged on May 4th).

  25. anuragdadheech commented on Mar 7, 2017

    @anuragdadheech

    This is still reproducible on Android, RN v0.30
    Fixed before v0.39.

  26. hramos commented on Jul 20, 2017

    @hramos
    Contributor

    Hi there! This issue is being closed because it has been inactive for a while. Maybe the issue has been fixed in a recent release, or perhaps it is not affecting a lot of people. Either way, we're automatically closing issues after a period of inactivity. Please do not take it personally!

    If you think this issue should definitely remain open, please let us know. The following information is helpful when it comes to determining if the issue should be re-opened:

    • Does the issue still reproduce on the latest release candidate? Post a comment with the version you tested.
    • If so, is there any information missing from the bug report? Post a comment with all the information required by the issue template.
    • Is there a pull request that addresses this issue? Post a comment with the PR number so we can follow up.

    If you would like to work on a patch to fix the issue, contributions are very welcome! Read through the contribution guide, and feel free to hop into #react-native if you need help planning your contribution.

  27. locked as resolved and limited conversation to collaborators on Jul 20, 2018
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions