Why do I need to parcel my object even if I just need to send it to another thread of the same task? Actually I need to open an activity that will run even on the same thread (t
Android requires that any object you pass between tasks, activities, threads or services must be flattened into a Parcel or implement Serializable. They do this so that you can pass the object by value. When you pass objects to methods or functions, you're passing by reference. Intents are passed to the system and the system determines where to route your intent, whether it starts one of your activities or maybe opens another app.
In the case of the receiving object not being a part of your app, the receiver won't have access to your app's memory. For that reason, passing an Object reference would cause the receiving app to crash. By flattening the object to a Parcel or Serializable blob, the receiver can act on the values that were sent without having access to the original reference. If Google were to implement a facility where you can pass a basic object, it would require them to write deep copy functions for all objects and you would be required to write deep copy functions for all of your custom objects which would get really messy, slow and would take up quite a bit of system memory which could overflow the VM. By providing a common, basic facility for passing objects, they're able to speed up performance, reduce memory requirements, and ensure security by not allowing other apps to reference your app's memory.
As mentioned before though, you can create global references to object you want to pass between activities so long as they're all part of your application. It's not the most elegant solution and requires you to null out references when you're done with them so you don't eat up unneeded memory but it works well enough.