Faits: A. Le 20 avril 2008, A._, ressortissant français, a été arrêté à Genève dans le cadre d'une enquête portant sur trois agressions de prostituées; il a reconnu partiellement les faits. Le même jour, le Juge d'instruction genevois en charge de la procédure l'a inculpé de tentatives de meurtre (art. 22 et 111 CP), de brigandages (art. 140 CP), de vols (art. 139 ch. 1 CP) et de menaces (art. 180 CP). A._ a été placé en détention préventive. La Chambre d'accusation du canton de Genève (ci-après: la Chambre d'accusation) a prolongé sa détention par ordonnances des 25 avril, 20 juin, 19 septembre et 19 décembre 2008, notamment en raison des risques de fuite et de réitération. A._ a présenté des requêtes de mise en liberté provisoire, qui ont été rejetées par la Chambre d'accusation par ordonnances des 20 juin et 17 octobre 2008. B. Le 22 avril 2009, A._ a présenté une nouvelle requête de mise en liberté, que la Chambre d'accusation a rejetée par ordonnance du 24 avril 2009. Cette autorité a considéré que les motifs de maintien en détention exposés dans une précédente ordonnance du 17 octobre 2008 étaient toujours valables et que le risque de fuite était encore plus élevé en raison de la proximité de l'audience de jugement, prévue en juin 2009. Elle a en outre estimé qu'une caution, quel qu'en soit le montant, n'était pas de nature à garantir la présence de l'inculpé à l'audience de jugement. C. Agissant par la voie du recours en matière pénale, A._ demande au Tribunal fédéral d'annuler l'ordonnance du 24 avril 2009. Il requiert en outre l'assistance judiciaire. La Chambre d'accusation se réfère à sa décision et signale que l'audience de jugement est fixée du 22 au 24 juin 2009 devant la Cour d'assises du canton de Genève. Elle produit en outre l'ordonnance de renvoi en jugement du 20 janvier 2009. Le Procureur général du canton de Genève s'est déterminé; il se borne à conclure à la confirmation de l'ordonnance attaquée. Ces déterminations ont été communiquées au recourant, qui a n'a pas formulé d'observations complémentaires.