我在各地搜索了一个方法,在Android应用程序中具有相当于main()函数(yes函数而不是方法)但是失败了......
通常我想做的是:
void main()
{
// do some really nice initialisations stuff here
// ... let the app does his life, I really don't care
// do some final stuff here before leaving
}
Run Code Online (Sandbox Code Playgroud)
到目前为止,我看到的最接近的方法是使用SplashScreen并覆盖OnCreate()方法.从我的角度来看,问题是不可接受的.为什么?因为SplashScreen不是标记为启动器的活动.
这使它出现在应用程序列表中,这是我开发应用程序小部件时不想要的东西.此外,在应用程序销毁之前将代码放在何处?在onDestroy()方法中?不,再一次,这不可靠.Android可以决定删除我的实例,而应用程序仍在运行.
好吧,事实上,我认为我的应用程序的每个组件都在同一个进程中运行,因为我没有在Manifest中明确提到我不是在自己的进程中运行的组件.
在app小部件的情况下,我在第一次调用onUpdate()方法时放置了我的初始化代码.我认为这是一个不错的选择.然后这个应用程序小部件(更准确地说是AppWidgetProvider)负责按照意愿启动任何活动.
所有应用程序的"DataBase"都在单独的Singleton中定义,如下所示:
public class MyDataBase {
public static MyDataBase getInstance() {
if (instance_ == null)
instance_ = new DataBase();
return instance_;
}
public void load();
public void save();
static MyDataBase instance_ = null;
public int myInt;
public String myString;
public Object myObject;
etc.. …Run Code Online (Sandbox Code Playgroud) 我面临一个非常烦人的问题.我有一个执行代码可能需要几十秒.最后,我需要获得该计算的结果.
如果我只在主线程上执行代码,Android会弹出告诉线程被阻塞并询问我们是否要强制阻止.
原则是正常的,每个操作系统内核都需要知道我们的代码仍处于活动状态且未被阻止.
所以我的问题是如何告知Android我们还没死?例如,相当于Sleep(0)或ProcessMessage()或任何东西......但是告诉Android我们没有死,因为我们只是在等待或执行很长时间的事情......
请不要回答我:"让你的计算在一个单独的线程中",因为问题将完全相同.主线程仍然需要坐下来知道线程何时完成及其结果.
可能重复:
Android:线程中的Toast
我正在尝试使用标准方法在线程内显示Toast:
Toast.makeText(context, "Hello World!", Toast.LENGTH.SHORT).show();
Run Code Online (Sandbox Code Playgroud)
以正常方式,这是当然的工作.但是当我尝试从一个单独的线程调用时,我有一个例外:
java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()
Run Code Online (Sandbox Code Playgroud)
我完全不知道这意味着什么.
我传递的上下文值是应用程序本身(应用程序继承自上下文)或Application.getApplicationContext().
顺便说一句,我也完全不知道为什么会有这个多余的东西.应用程序(它本身已经是一个Context)和Application.getApplicationContext().