Privacy policyContactsAbout siteOpinionsGitHubDonate
© EVILEG 2015-2018
Recommend hosting
TIMEWEB
Jan. 21, 2019, 4:28 p.m.
Михаиллл

Добрый день. Почему работая на С++, нельзя полноценно использовать dll , написанных на C#, java? И почему используя другие языки, можно использовать dll , написанных на C++?

Dec. 27, 2018, 6:53 a.m.

Android

Memory leaks, garbage collection, Java

What is memory Leaks in Android development ?

The application creates objects, they lie in memory and can not clean out after the completion of its work.

Why is this happening ?

Java has its own means of clearing memory from unused items. This is garbage collection .

The garbage collector marks all objects that can be deleted if they are not referenced. Memory leak - this is just a lost reference, which shows that the object can not be deleted.

The complexity of this bug is that until a certain time it is not visible and it can not interfere. There's a good quote from Benjamin Franklin: “A small leak will sink a great ship." Memory leaks take the RAM of the application. The amount of raw memory will grow and may one day cause your app to slow down and crash . This will lead to user dissatisfaction and most likely the app will be removed...

x
Dec. 12, 2018, 4:28 p.m.
xintrea

Как выяснилось в этом обсуждении:

Отправка Email из Android в Qt

для отправки Email в Android необходимо делать Java-метод, который и будет отправлять email. И этот Java-метод надо дергать из C++ окружения.

Начал я его делать (за основу можно взять пример взаимодействия Java<->C++ товарища EXL https://github.com/EXLMOTODEV/QmlDestroyTest).

В файле JniEventActivity.java добавил вот такой метод sendMail(), (Вариант 1):

public class JniEventActivity extends org.qtproject.qt5.android.bindings.QtActivity {

...

    public static void sendMail(String to, String subj, String text) {
        Log.w(TAG, "Java msg: Send mail. To:"+to+" Subj:"+subj+" Text:"+text);

        final Intent emailIntent = new Intent(android.content.Intent.ACTION_SEND);

        emailIntent.setType("plain/text");

        // Кому
        emailIntent.putExtra(android.content.Intent.EXTRA_EMAIL,
            new String[] { to }); // Возможна отправка несколькми адресатам?

        // Тема
        emailIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, subj);

        // Текст
        emailIntent.putExtra(android.content.Intent.EXTRA_TEXT, text);

        startActivity(Intent.createChooser(emailIntent, "Отправка письма..."));
    }

Однако этот код не компилируется и выдается ошибка:

JniEventActivity.java:113: error: non-static method startActivity(Intent) cannot be referenced from a static context
        startActivity(Intent.createChooser(emailIntent, "Отправка письма..."));
        ^
:compileDebugJavaWithJavac FAILED

То есть метод startActivity() для текущей активности не может вызваться из статического метода, потому что startActivity() нестатический.

Тогда я попробовал сделать так (Вариант 2):

        Activity activity;
        activity.startActivity(Intent.createChooser(emailIntent, "Отправка письма..."));

Но так тоже не компилируется, ошибка:

JniEventActivity.java:118: error: variable activity might not have been initialized
        activity.startActivity(Intent.createChooser(emailIntent, "Отправка письма..."));
        ^
Note: Some input files use or override a deprecated API.

Моих знаний Java в Android не хватает на то чтоб понять как правильно инициализировать Activity. Поэтому, потыкавшись, решил попробовать третий вариант.

В прототипе метода sendMail() я убрал static, вернул строку вызова отправки Email в состояние по Варианту 1, и компиляция заработала. Но при попытке отправить email происходит сегфолт вот с такими ошибками:

F art     : art/runtime/java_vm_ext.cc:410] JNI DETECTED ERROR IN APPLICATION: GetMethodID received NULL jclass
F art     : art/runtime/java_vm_ext.cc:410]     in call to GetMethodID
F art     : art/runtime/java_vm_ext.cc:410]     from void org.qtproject.qt5.android.QtNative.startQtApplication()
F art     : art/runtime/java_vm_ext.cc:410] "qtMainLoopThread" prio=5 tid=11 Runnable
F art     : art/runtime/java_vm_ext.cc:410]   | group="main" sCount=0 dsCount=0 obj=0x134499a0 self=0xb7fcb090
F art     : art/runtime/java_vm_ext.cc:410]   | sysTid=20465 nice=0 cgrp=top_visible sched=0/0 handle=0xb2d71930
F art     : art/runtime/java_vm_ext.cc:410]   | state=R schedstat=( 1185709460 105310192 298 ) utm=94 stm=24 core=1 HZ=100
F art     : art/runtime/java_vm_ext.cc:410]   | stack=0xb2c6f000-0xb2c71000 stackSize=1038KB
F art     : art/runtime/java_vm_ext.cc:410]   | held mutexes= "mutator lock"(shared held)
F art     : art/runtime/java_vm_ext.cc:410]   native: #00 pc 00371069  /system/lib/libart.so (_ZN3art15DumpNativeStackERNSt3__113basic_ostreamIcNS0_11char_traitsIcEEEEiPKcPNS_9ArtMethodEPv+160)
F art     : art/runtime/java_vm_ext.cc:410]   native: #01 pc 003508c3  /system/lib/libart.so (_ZNK3art6Thread4DumpERNSt3__113basic_ostreamIcNS1_11char_traitsIcEEEE+150)
F art     : art/runtime/java_vm_ext.cc:410]   native: #02 pc 0025a8ed  /system/lib/libart.so (_ZN3art9JavaVMExt8JniAbortEPKcS2_+740)
F art     : art/runtime/java_vm_ext.cc:410]   native: #03 pc 0025afc5  /system/lib/libart.so (_ZN3art9JavaVMExt9JniAbortVEPKcS2_St9__va_list+64)
F art     : art/runtime/java_vm_ext.cc:410]   native: #04 pc 000fda29  /system/lib/libart.so (_ZN3art11ScopedCheck6AbortFEPKcz+32)
F art     : art/runtime/java_vm_ext.cc:410]   native: #05 pc 001021ef  /system/lib/libart.so (_ZN3art11ScopedCheck5CheckERNS_18ScopedObjectAccessEbPKcPNS_12JniValueTypeE.constprop.95+2690)
F art     : art/runtime/java_vm_ext.cc:410]   native: #06 pc 00113785  /system/lib/libart.so (_ZN3art8CheckJNI11GetMethodIDEP7_JNIEnvP7_jclassPKcS6_+396)
F art     : art/runtime/java_vm_ext.cc:410]   native: #07 pc 0014e6d9  /data/app/ru.farwater.gnss.farwaterma-2/lib/arm/libQt5Core.so (???)
F art     : art/runtime/java_vm_ext.cc:410]   native: #08 pc 00150401  /data/app/ru.farwater.gnss.farwaterma-2/lib/arm/libQt5Core.so (???)
F art     : art/runtime/java_vm_ext.cc:410]   native: #09 pc 001505a7  /data/app/ru.farwater.gnss.farwaterma-2/lib/arm/libQt5Core.so (_ZNK17QJNIObjectPrivate11callMethodVIvEET_PKcS3_St9__va_list+54)
F art     : art/runtime/java_vm_ext.cc:410]   native: #10 pc 0000b6e1  /data/app/ru.farwater.gnss.farwaterma-2/lib/arm/libQt5AndroidExtras.so (_ZNK17QAndroidJniObject10callMethodIvEET_PKcS3_z+24)
F art     : art/runtime/java_vm_ext.cc:410]   at org.qtproject.qt5.android.QtNative.startQtApplication(Native method)
F art     : art/runtime/java_vm_ext.cc:410]   at org.qtproject.qt5.android.QtNative$6.run(QtNative.java:359)
F art     : art/runtime/java_vm_ext.cc:410]   at org.qtproject.qt5.android.QtThread$1.run(QtThread.java:61)
F art     : art/runtime/java_vm_ext.cc:410]   at java.lang.Thread.run(Thread.java:833)
F art     : art/runtime/java_vm_ext.cc:410]

Вот, дальше уже не знаю что делать. Вопрос: как исправить код, чтоб отправка email заработала?

Дополнительно:

В C++ коде вызов данного метода в статическом исполнении происходит так:

QAndroidJniObject::callStaticMethod<void>("ru/farwater/gnss/farwaterma/JniEventActivity",
                                "sendMail",
                                "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
                                javaTo.object<jstring>(),
                                javaSubj.object<jstring>(),
                                javaText.object<jstring>());

А нестатический вариант вызывается так:

    QAndroidJniObject androidObj;
    androidObj.callMethod<void>("ru/farwater/gnss/farwaterma/JniEventActivity",
                                "sendMail",
                                "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V",
                                javaTo.object<jstring>(),
                                javaSubj.object<jstring>(),
                                javaText.object<jstring>());
Nov. 28, 2018, 6:58 p.m.

Java

Java, synchronization, threads, processes

I propose to consider several ways to synchronize threads and processes that are most commonly used in Java. They differ in implementation and use cases. We will consider all methods on interesting examples.

Critical section

This method is suitable for you if:

  • parallel threads work with a shared resource;
  • requires synchronization between threads, not processes;

This method of synchronization is called resource synchronization ("open – close" synchronization). The idea of this method is that each object in Java has an associated monitor . A monitor is a kind of tool to control access to an object.

Sept. 26, 2018, 11:53 a.m.

Java

Java, пул, шаблоны проектирования

Example of the design pattern An object pool in the Java programming language.

Sept. 24, 2018, 2:34 p.m.

Java

шаблоны проектирования, factory, method, Java, JAVA

In class-based programming, the factory method pattern is a creational pattern that uses factory methods to deal with the problem of creating objects without having to specify the exact class of the object that will be created. This is done by creating objects by calling a factory method—either specified in an interface and implemented by child classes, or implemented in a base class and optionally overridden by derived classes—rather than by calling a constructor.

Sept. 17, 2018, 1:47 p.m.

Java

abstract, Java

Abstract Factory classes are often implemented with Factory Methods, but they can also be implemented using Prototype. Abstract Factory might store a set of Prototypes from which to clone and return product objects.

  • Factory Method: creation through inheritance.
  • Prototype: creation through delegation.
  • Virtual constructor: defer choice of object to create until run-time.
June 12, 2018, 6:34 a.m.

Java

алгоритм ли, волновая трассировка, волновой алгоритм, Java

Sometimes there is a problem to find the minimum path from point A to point B . The map can have barriers and be like a labyrinth. Similar tasks can be done in game development, PCB design and GPS development, etc.

There is a large set of algorithms for finding the minimum path. The most simple and effective is the Wave trace Algorithm (Lee algorithm). Which is based on the methods of breadth-first search.

This algorithm is not difficult to understand. It will be understandable even for a beginner in programming.

Last comments
V
Feb. 14, 2019, 6:41 p.m.
Vlad15007

Спасибо огромное! Заработало!
А
Feb. 12, 2019, 9:26 a.m.
Александр90

Сам разборался, спасибо.
А
Feb. 12, 2019, 8:19 a.m.
Александр90

День добрый! Можешь выложить форму mainwindow.ui от урока? Заранее спасибо
Feb. 11, 2019, 10:51 a.m.
Евгений Легоцкой

Нет, у меня проблема с жёстким диском случилась, занимался восстановлением ПК, ещё пару вечеров придётся этим заниматься, увы.
Now discuss on the forum
Feb. 15, 2019, 9:22 p.m.
IscanderChe

Доброй ночи.Скромно напоминаю о своём вопросе...
Feb. 15, 2019, 3:36 p.m.
Евгений Легоцкой

Ну я тут нашёл одно решение, но сам его не проверял. Вам нужно помещать фамилии скорее всего в ячейки заголовка, и потом просто перерисовывать их QHeaderView * header = m_ui->tableWidget...
Feb. 15, 2019, 7:53 a.m.
Евгений Легоцкой

Добрый день! Не работал с remoteobjects, поэтому глянул документацию, чтобы рассмотреть, что это за зверь. После просмотра документации сложилось стойкой впечатление, что это вполне возм...
m
Feb. 14, 2019, 6:28 p.m.
mr_roman

Нашел решение на Java. Удалось интегрировать в проект сервиса на Qt, теперь из Qt запускаю Java-код акселерометра.
Feb. 14, 2019, 11 a.m.
Евгений Легоцкой

ok. I see. You changed related name Try this {% if goal.joined.all|user_in:request.user %}
Join us in social networks

For registered users on the site there is a minimum amount of advertising