My personal take would be the tutorial at startup approach. BUT I would recommend that you carefully consider your app's targeted user.
If your average user needs get a bit of context and help to get started using your app correctly, then a startup tutorial/walk-through should be used. A good example of when this is appropriate is when an app does a complete UI redesign since that requires a bit of adjustment for every user of the app and allows the app to point out what has moved and what is the same.
I tend to prefer this type of walk-through since I am usually able to skip them if I prefer to wander on my own. If the user would miss out on important information, then obviously don't make your walk-through optional.
The problem I see with tutorials that are contextual and happen while the app is being used is that they interrupt user flow and train of thought. If these tips are minor and very little guidance is needed for your app in general, then this might be the preferred approach. Also, if your process is very complex then walking the user through it might be the right thing to do.
Ultimately, the right answer is that "it depends" on your audience. In particular, focus on how much help a user needs to get started using your app. Tailor the amount of required and offered help in your app accordingly.