Here is the best way I've found so far: (it was written in WP 3.5)
Information:
The main thing to keep in mind register_activation_hook is that it is called an intermediary page between clicking on the activation link from wp-admin / plugins.php and viewing the plugin activation notification after it has been connected. I found this after I tried to use a variable $_GETthat is sent from the Activate link. If you look well at the link you click and the link you are in is a little different. That is why you cannot use add_action(), do_action() or add_filter()... inside triggers register_activation_hook(). It is instantly redirected after activating the plugin.
Decision:
add_option hook
...
register_activation_hook( __FILE__, function() {
add_option('Activated_Plugin','Plugin-Slug');
});
add_action('admin_init','load_plugin');
function load_plugin() {
if(is_admin()&&get_option('Activated_Plugin')=='Plugin-Slug') {
delete_option('Activated_Plugin');
}
}
...