You can use intent flags to get rid of that second problem, you mentioned. Refer to this link for the available flags: https://developer.android.com/reference/android/content/Intent.html
Then, you can use those flags like this,
Intent intent = new Intent(context, MainActivity.class);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(intent);
when starting an activity.
And for the third problem you listed, you can assign pending intents to the notification which will get fired after clicked.
Intent intent = new Intent(this, FNotiReceiver.class);
intent.setAction("com.nepal.application.pendingIntent");
intent.putExtra("Name", "Data/Value");
PendingIntent pendingIntent = PendingIntent.getBroadcast(this, notification_ID,
intent, PendingIntent.FLAG_UPDATE_CURRENT);
and to remove the notification after clicking it, you can use:
NotificationManager notifManager= (NotificationManager) context.getSystemService(Context.NOTIFICATION_SERVICE);
notifManager.cancel(notification_ID);
Sorry I don't have the exact answer to your 1st issue, but I think creating a background service will help.