我有
procedure TMainForm.FormCreate(Sender: TObject);
begin
DragAcceptFiles (Handle, True ) ;
end ;
Run Code Online (Sandbox Code Playgroud)
但表单不接受拖动文件 - 没有删除游标,没有触发WM_DROPFILES消息.
我在FormShow事件中有以下构造(出于不同的原因 - 在创建表单后,我只想执行一次代码,并且FormShow在初始化期间多次触发):
procedure TMainForm.FormShow(Sender: TObject);
begin
if (not FRunOnce) then // as FormShow can be called twice - if Form.Position assigned to
begin
DragAcceptFiles (Handle, True ) ;
FRunOnce := True ;
end ;
end ;
Run Code Online (Sandbox Code Playgroud)
在显示的位置DragAcceptFiles(Handle,True)仍然不起作用.如果我将它移动到例程的顶部(因此它执行两次),它确实有效:
procedure TMainForm.FormShow(Sender: TObject);
begin
DragAcceptFiles (Handle, True ) ;
if (not FRunOnce) then // as FormShow can be called twice - if Form.Position assigned to
begin
FRunOnce …Run Code Online (Sandbox Code Playgroud) 我有一个在单独进程中运行的服务.我发现在主进程UI线程退出onDestroy()之后我的服务正在被销毁,即使我已经提供了带有绑定的应用程序上下文并指定了BIND_AUTO_CREATE.
在我的主进程'UI thread onCreate()中,我有这个绑定代码:
Intent intent = new Intent(mAppContext, MyService.class);
mAppContext.bindService(intent, mMyServiceConnection, Context.BIND_AUTO_CREATE);
Run Code Online (Sandbox Code Playgroud)
在我的主进程'UI thread onDestroy()中,我有这个无法解释的代码:
mAppContext.unbindService(mMyServiceConnection);
Run Code Online (Sandbox Code Playgroud)
请注意,我从不调用stopService().
Android的bindService()文档说:
只要存在调用上下文,系统就会认为该服务是必需的.
如果我正确地阅读,因为我提供了应用程序的上下文,系统认为该服务在应用程序的生命周期内是必需的.
我原以为应用程序的上下文可能会与onDestroy()一起消失.这就是Android的文档对getApplicationContext()的说法:
返回当前进程的单个全局Application对象的上下文.
如果应用程序的上下文与onDestroy()一起消失,那么我认为Android有一个大问题.问题是当旋转显示时,调用onDestroy()(紧接着是onCreate()).因此效果是当显示器旋转时 - 在我的情况下它经常发生! - 我的服务总是退出.
请注意,我的应用程序进程的pid永远不会更改,即它是相同的进程.鉴于getApplicationContext()的文档声明"当前进程",这一点很重要.
以下是我的调试日志显示的内容:
04-03 05:15:12.874:DEBUG/MyApp(841):main onDestroy
04-03 05:15:12.895:DEBUG/MyApp(847):service onUnbind
04-03 05:15:12.895:DEBUG/MyApp(847) ):service onDestroy
04-03 05:15:12.934:DEBUG/MyApp(841):main onCreate
04-03 05:15:12.966:DEBUG/MyApp(847):service onCreate
04-03 05:15:12.975:DEBUG/MyApp(847):service onBind
所以我的问题是:
1)我对绑定/解除绑定的理解是否正确?
2)当调用UI线程的onDestroy()时,有没有办法让我的服务不被破坏?
问题#2的黑客攻击永远不会解开.但是我不喜欢它,因为每次调用onDestroy()时我都会泄漏一个绑定.我可以"记住"我有一个泄漏的绑定,只泄漏那个,但后来我有级联黑客,它真的很难看.
我从Android开发者(http://developer.android.com/reference/android/app/Activity.html)中看到,有一个很好的流程图显示onCreate导致onStart当时onResume等等.我的问题是:什么其他的on****()方法出现在之间onCreate和onStart?
例如,我一直在研究这个主题,我知道其他方法,例如onMeasure和onSizeChanged,onDraw等等.它们在哪里适合该流程图?
谢谢.
在阅读"Hello,Android"一书时,我注意到:
每个带有
onCreate(Bundle savedInstanceState)方法的java文件,在程序的主Activity中都有 受保护的访问修饰符EXCEPT [具有:public void onCreate(Bundle savedInstanceState)].
为什么程序的主要Activity上的onCreate方法public,但protected在其他地方?
关于这个问题的更多内容.
我想知道如果我没有杀死它,我在创建一个Activity的意图中传递的数据是否会保留.
示例:活动A使用额外数据String(SomeStringValue)调用活动B. 然后活动B调用调用D的C.现在在某个时间活动B被销毁(例如为了节省内存),当我回到活动B时需要重新创建它(例如再次调用onCreate)但是因为我使用了后退按钮而不是传递意图我的先前意图仍然存在,我可以得到我需要的数据或将数据消失.
我试图自己测试但是我无法在不杀死整个应用程序的情况下再次调用.
我正在制作一个Android应用程序,用于测试手机上的某些安全功能是否已启用.例如,如果您启用了密码登录,或者您的手机上的数据已加密.
出于某种原因,应用程序必须运行两次才能测试并查看是否在手机上启用了这些安全功能,这是我正在尝试解决的问题.我希望它能够测试并查看在创建应用程序时以及第一次运行应用程序时是否启用了安全功能,而不是第二次运行应用程序.
我测试onStart()我的MainActivity文件中的函数是否启用了这些功能.我在下面列出了函数代码:
@Override
@TargetApi(Build.VERSION_CODES.JELLY_BEAN_MR1)
@SuppressLint("NewApi")
public void onStart()
{
super.onStart();
//determine if phone uses lock pattern
//It returns 1 if pattern lock enabled and 0 if pin/password password enabled
ContentResolver cr = getBaseContext().getContentResolver();
lockPatternEnable = Settings.Secure.getInt(cr, Settings.Secure.LOCK_PATTERN_ENABLED, 0);//Settings.System
//returns 1 if pin/password protected. 0 if not
KeyguardManager keyguardManager = (KeyguardManager) getBaseContext().getSystemService(Context.KEYGUARD_SERVICE);
if( keyguardManager.isKeyguardSecure())
{
//it is pin or password protected
pinPasswordEnable=1;
}
else
{
//it is not pin or password protected
pinPasswordEnable=0;
}//http://stackoverflow.com/questions/6588969/device-password-in-android-is-existing-or-not/18716253#18716253
//determine if …Run Code Online (Sandbox Code Playgroud) 我有一个非常类似的问题:Android - ActionBar没有使用onConfigurationChanged(AppCompat)调整大小
我需要让android处理方向更改,因为我想重新创建活动.
但是,我还需要检测何时产生了方向变化.
这两项综合需求是否能够立即实现?
android screen-orientation oncreate android-lifecycle android-orientation
在 Google Play 上,我NullPointerException在尝试访问静态Application实例时收到一条消息。它出现在不同的 Android 操作系统版本上:Android 9、8 和 6。
从代码来看,似乎Application.onCreate()尚未被调用或在之后调用Activity.onCreate()。
我看到了类似的问题,但没有任何有用的回应:
应用程序 onCreate 在 Activity onCreate 之后调用(未调用)
Android Activity::onCreate 在 Application.onCreate 之前调用
作为一个侧面解决方案,我将创建一个单独的单例类,Context并根据Context. 但是,我不确定它如何与 Dagger 一起使用。
我的问题是:
public class App extends androidx.multidex.MultiDexApplication implements Application.ActivityLifecycleCallbacks, ComponentCallbacks2 {
private static App instance;
public static App getInstance() {
return instance;
}
@Override
public void onCreate() {
super.onCreate();
instance = this;
// init singletone
}
private Singletone singletone;
public …Run Code Online (Sandbox Code Playgroud) 我有一个3个活动,所有这些活动都有一个ViewFlipper,其中一些图像一直在运行.问题是我从SDCard加载这些图像,并且有大约180张图像.
每次我调用其中一个活动,ViewFlipper都需要一些时间才能完成..我想知道是否有类似onAppear for Android的内容.每次调用Activity时,Activity的内容都会发生变化,所以它不能是singleTask ..
我想知道是否有办法刷新一个Activity内容,但没有丢失它的内容..就像这样:在onCreate上,一切都会正常完成,但在onAppear之类的东西,我只会改变我需要的东西,这样onCreate只会被调用一次.
这就是我在三个活动之间的变化:
startActivity(new Intent(FirstOne.this, OtherOne.class));
Run Code Online (Sandbox Code Playgroud) public class MyApplication extends Application{
@Override
public void onCreate()
{
super.onCreate();
Log.d("*******:", "onCreate");
}}
Run Code Online (Sandbox Code Playgroud)
public class MainActivity extends ActionBarActivity{
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}}
Run Code Online (Sandbox Code Playgroud)
<application
android:name=".MyApplication"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name=".MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Run Code Online (Sandbox Code Playgroud)
当第一次打开此应用程序时,MyApplication中的onCreate()方法已被调用,但是当我完成Activity(按Back Button),然后重新打开应用程序时,我发现MyApplication中的onCreate()方法未被调用.
奇怪的是,如果我在系统背景中"杀死"应用程序,然后重新打开它,我发现可以再次调用onCreate()方法.
我不知道为什么,我想在用户重新打开我的应用程序时获取操作,有人可以帮忙吗?谢谢!